"Learning", I have been thinking about this topic lately. There are several things I felt about learning, from my point of view as a Computer Science student as well as an independent person. Lately, I am feeling like, I am not learning fast enough. There seems to be so many topics to be learned (mostly are not about the course lessons though, they are about the Algorithms). Sometimes, while learning, I realized that out of these many topics (most are some subtle algorithms for solving some problems), there seem that many person out there (especially competition enthusiasts) have mastered much more than I do. Thanks to the "flat world", this is becoming a problem, because most competitions I join are international, and mostly online as well. Somehow, I feel like I have to accelerate my learning, otherwise I will never catch up with the champions.
However, learning requires two things : materials, time, and motivation. Acquiring the text materials is no more difficult thanks to the internet, and motivation is certainly not a problem for me. However, time is a problem. I realized that I can’t learn much while I’m multitasking (which, means, having the long term projects, especially big software projects while learning). Having these extra burden while learning significantly distracted my concentration on a single topic, which means, wasting my time when learning things.
These works (project - especially e.COM System) however, can not be abandoned anyway. Although I don’t learn much doing projects, I have committed to do it. Therefore, I think the best solution is to have the projects done as soon as possible, and for the future, I should limit the number of tasks to do at one time. I think it is about at most one project at a time in the future, which should not be a big project, one week of work at most. For this time, I aim to finish the whole e.COM System by the end of July. After that, I will focus on learning algorithm, in preparation for the ACM ICPC Regionals 2007. Last time, I did not prepare enough to achieve the top positions. This time, there should be no more compromise, as this will be my last chance of joining the ACM ICPC. The world is changing, the competitors are growing, and I’m afraid that if I don’t learn fast enough, I will never reach the top.
In the past, I focused more on software development. Later on, I realized that the world of software development does not mean much : it is something that an average programmer can learn easily. Software development is more about work : if you work, you’ll be able to do it. However, algorithms and competitions are different. Here, learning means something, and time is important as well. In a simpler way : if I practice too much software development now (J2EE or web development, for example), the skills I get will be useless in a few years to come. It is different with algorithms, which is growing, rather than changing. Once I master all of the common algorithms, improving should require less work because new algorithms don’t come up that often. Most algorithms in use today basically comes from 60s, 70s, 80s, but so few comes from 90s or the last few years. Therefore, it’s less likely to become obsolete anytime soon. Compare with web development, where a handful new technologies comes out every month. Without understanding these changes, any programmer will most likely either end up jobless in ten or twenty years, or otherwise work as a low level programmer for the entire career.
The world of computer science is growing, while software development is changing. Most programmers are software developers instead of scientists. Learning software development is much easier than learning the science, but software development require a more of constant learning due to its changing nature. Learning is the only way for a programmer to survive the future, and that’s why I don’t want to be a programmer for my entire career, it’s not a stable job. What do you think?
-Andrian Kurniady
“Learning is the only way for a programmer to survive the future, and that’s why I don’t want to be a programmer for my entire career, it’s not a stable job. What do you think?”
that’s what I thought 6 months ago… and I have my own path of future now. =)
August 31, 2007 @ 11:08 amin addition, yes, gw membabat habis smua blog lu lagi. karena cape comment di setiap blog, saya nyampah di sini saja.
thank you for appreciating my opinion (as stated in one of your article) =p
great senior. glad to know you
August 31, 2007 @ 11:11 amhoahmm…. agree with u… =)… tapi kalo gak belajar software development ntar GPA di binus jeblok :S… Hahahaha =p
September 22, 2007 @ 1:00 pm…..if I practice too much software development now (J2EE or web development, for example), the skills I get will be USELESS in a few years to come……
October 30, 2008 @ 10:50 amuseless??
tadinya, aku sempet berpikir ‘mirip’ spt itu…(entah mirip ato ga’..hehe…:D ) yaitu aku sempet berpendapat bahwa kalo kita kuat di algorithms maka insyaAllah kita pun akan kuat juga (ato paling tidak, cepat untuk belajar di Software Development)..namun, tidak sebaliknya…
tapi seiring berjalannya waktu,,,,aku menyadari tidak sepenuhnya itu benar…setidaknya hal itu aku sadari saat sekarang ini bekerja…yaitu ini beberapa hal yang kusadari…bahwa kecerendungannya berbeda antara algoritms dan software development…kalo algoritma ternyata lebih menekankan efektivitas dan efisiensi (all about kompleksitas runtime dan resource)…dan kalo software development cenderung menekankan ke konsep (semisal Design Pattern)…so, orang2 yang suka terjun ke softw.development biasanya ‘main’2 di konsep memprogram…dan perkembangan softw.development memang ke arah tsb(konsep) semisal JBOSS Seam dengan konsep Conversation Context dan Bijection (injection dan outjection)nya…ada SPRING dengan IoC nya…kalo algo lebih ke kompleksitas….
entahlah…this is just my opinion…because i’m feeling n thinking this…
tapi sebenarnya antara algo dan soft.dev. saling terkait dan membutuhkan satu dan yang lainnya…
akan menjadi sulit saat tidak ada tools semisal IDE (Netbeans, DevCPP,dll) hasil pengembangan softw.dev. untuk mengimplementasikan algo….dan bayangkan jika algo2 keren semisal Introsort tidak ada…hanya ada bubble sort…atau tidak ada binary search…maka proses indexing database (hal2 yg erat kaitannya dgn soft.dev akan terhambat)…..
simbiosis mutualisme…
^_^
Kalo kata gw sih, konsep2 software engineering macem design pattern itu nggak susah dipelajari. Bahkan bisa dipelajari on-the-fly. Yang penting tau di mana mencari dan tau kalo perlu mencari. Kalo diperhatikan, sebenernya konsep2nya macem Bijection, IoC, SOA, itu konsepnya ya itu-itu aja, hanya dikemas dengan product yang berbeda2.
Dengan basis logic yang cukup, konsep tersebut bahkan bisa ditemukan sendiri tanpa perlu diajari. Misalnya design patterns, dengan logic yang cukup, bisa jadi kita sudah menggunakan design patterns dengan sendirinya (hasil dari experience dan pemikiran, etc.). Ketika suatu saat buka buku “Design Patterns”, kadang gw menemukan “loh, ini kan kayak yang biasa gw buat”. Dan memang tujuan dari design patterns adalah demikian, mentransfer patterns yang telah dipakai (proven) oleh expert untuk meningkatkan kualitas pemrograman “average programmer”.
Yang menurut gw nggak perlu dipelajari terlalu serius itu adalah bagian implementasi konsep tersebut, misalnya… gw nggak ada minat tuh menjadi “ahli Java” atau “ahli .NET”. Karena gw tau, kalo suatu saat gw bakal perlu Java maka gw bisa belajar dengan basis konsep yang sudah ada, belajarnya tidak akan sulit. Belum tentu juga pada saat gw perlu mendevelop software suatu saat nanti, masih ada yang namanya .NET ato Java (kali kali malah sudah digusur sama bahasa dan teknologi lain, so, buat apa buang waktu kan…).
Programmer yang biasa saja, menciptakan program program yang keren. Programmer yang tidak biasa, mampu menciptakan program yang dapat digunakan programmer biasa untuk menciptakan program program keren tersebut. Gw lebih tertarik menjadi “programmer yang tidak biasa”.
-Kurniady
October 30, 2008 @ 11:57 am