Research, Dev, Share

Learning new things in IT

Posted in Learning, Software Development by Khang Vo on December 13, 2009

Generally, I think in every area, not just IT, people face 2 questions on their studying lives. What to learn and how to learn it as fast and as deep as possible.

What to learn

In fact, the problem with “What to learn” is in some case really hard to answer, in some other cases it is really easy when somebody like your teachers, your bosses tell you that you need to learn this specific topic to serve for the assignments or for working this project. However, when you decide yourself, it is a big challenge requires a lot of experience and high vision on What will be the next technology/idea coming and if it worths spending time learning that new ideas in a big forest of technology. Our time is valuable, there are many interesting outside, you can not learn all of them.  I will not focus yet on this problem but I want to Open Discussion for everybody to share their experience and vision to answer the big question “What Will be The Next”

How to learn

Now, I focus on the easier question, how to learn fast and deep enough.

Here is an interesting post that you can read it yourself. BuuNguyen’s blog, learn new things from books. Overall, it says something about why you have to learn new things from books.  If you have any arguments with that post. You should reply on that blog, that guy is willing to answer you. I want to extend it and share some thing more here.

That post only focus on convincing the advantage of books. I want to suggest that you should learn from many books on the same topic.  It is not a new suggestion also, I read it on blog KHMT (I forgot the link of the post, search it later).  Why do you have to do so?No matter how good the book is, it is coming from an individual or a small group of actors,  that is restricted, and not enough.  Every books has a different way of addressing the problem, and that particular addressing model, in most cases, is not always excellent for every chapters/problems. My experience is picking some good books, looking through table of contents, looking through explaining model (graph, text, code, examples, mathematics, science, technology solution, tutorial…). Usually, the explaining model is consistent through a whole book (or many chapters of that book).  Moreover, different books can suggest other ideas, concepts that a book lacks which will be seen when looking at the preface or table of content.

There are many other ways of learning suggested by Thanh Cong (slides) on barcampsaigon. In brief, he suggested team working, tutorials, pair programming. One more thing suggested by me on barcampsaigon also is Teaching (thanks to huyzing and eric hosick). IMO, you will not be an expert in a specific topic until you can teach other guys to be as good as you. You will need to understand the problem deeply before you can tell it by your language by your ways. Moreover, different people learn by different approaches, you have to teach them based on their approach, their way of thinking. Another value is that you will immediately know what you lack in that topics when standing before a huge number of different kinds of questions.

Tagged with:

19 Responses

Subscribe to comments with RSS.

  1. Khang Vo said, on February 9, 2010 at 4:47 am

    For the purpose of recommend people to learn and communicate effectively by English and also to open more opportunities to exchange with foreigners’ ideas, I currently do not allow Vietnamese communication.

    For your question “What thinking is”, it may worth a big discussion and I will share with you useful links, in both English and Vnese. To summarise, imo, there are some levels of thinking: remembering, applying exactly the theory into practice, know how and when to apply the theory, know why the theory exists, change and create a new theory.

  2. Người Việt said, on February 9, 2010 at 4:23 am

    Honestly, I do not understand what “thinking” is and how to think effectively. Anyone helps me?

  3. Người Việt said, on February 9, 2010 at 4:16 am

    Không rõ là ở đây có “cho phép” tranh luận bằng tiếng Việt không?

  4. Khang Vo said, on February 1, 2010 at 11:50 am

    Thanks for your summary. It gives me an overview of what happened from the past to current state. This can help a lot when looking to the future.

    I agree with you that we really need to practice, to face real challenges and solutions. To add more, for me, a good combination between theory and practice is good. If we lack either of them, it is hard to be successful. Theory and book give us abstract, new ideas and practice gives us concrete, real skills.

    It is right that the question “why” is really important and more important than what and how. But I think we should encourage people to move beyond that. After we can understand “why”, we should try to be innovative and creative as well. And I think that is the last level of thinking

  5. Nguyen Phuc Hai said, on January 30, 2010 at 1:53 pm

    I am involved to software development for 10 years. Since the time of my first job, there are many new things. Let I remember what the new related IT knowledge during my working period:

    – XML <– Web Services <– SOA <– ESB
    – HTML <– AJAX <– RIA (JavaFX, Silverlight, Flex and Aajax)
    – .NET, many scripting and domain languages such as Groovy, Scala etc
    – J2ME and orchestra environment for various smartphones now.
    – And we have the new terminology cloud computing!
    – Waterfall <– RUP <–various Agile methodologies

    However, despite the marketers say 'The new technology X will be the next IT innovation blah blah blah', there are some things still not be changed:

    – Software Development Life Cycle
    – Object Oriented thoughts

    Decide to learn new things, it is depended on your interest, vision and other career goals. Be calm and analyze your needs before learning, except you must learn some new thing are requested by project or company needs. If you are the developer, and you want to learn the new things that fits your interest and your future career, let use the fishbone diagram:
    – Device: Mobile, Desktop, Web
    – Language & Platform: Java, .NET, PHP, etc
    – Domain: Financial, ERP, CRM, etc (most of outsource guys do not care on domain).
    – Technology: SOA, REST, RIA, ESB
    – Infrastructure: Clustering, Cloud

    For instance, if you want to learn Java, and develop enterprise application, it leads you decide to learn SOA, ESB and related areas. You may know to learn XML APIs, JSON etc. Try to investigate more, you may learn new APIs like Spring, Hibernate, Mule, Osgi etc

    Another example, if you think mobile will be the next generation device that you can buy your product to end-user, and Android (bot iPhone) is the dominated mobile platform, you should learn Android API, Java (part of it) and you may learn mobile web protocols etc

    About the topic how to learn effectively: I works with many IT guys and one pattern I see that most of guys do not practice enough. They read many articles, books but they rare to code in a challenge project except some program has difficulty level as 'Hello world'. They can say about SOA, REST but they do not know how to make a interoperability that is the issues when applying SOA, REST in orchestra environment. To become the expert in any area, you should not learn, work but the most important factor is 'think'. And the most important question raised while learning is 'why' not 'what', 'how'. I do not think if you code more and more, you will be the 'good' developer.

  6. Khang Vo said, on December 28, 2009 at 2:40 pm

    1/ Ops, sorry, I did not mean that. I intend to challenge and make deeper discussion about the statement “professional in Algorithm and Data structure will make you learn faster”.:)

    2/ Yeah, it is business vision rather than technology vision as I already stated. However, they are closely related to each other in IT. I also refined the Google search engine example to make it more technology related.

    Yeah, there is not so much new idea in answers for the questions, I may need to gain some more experience before coming back this topic again

  7. serivn said, on December 27, 2009 at 4:33 pm

    1) OK I will wait for your thoughts about why (or why not) C or Pascal should be chosen as the language to learn DASP.

    2) Your example is really not so relevant. The vision you are talking about is a different kind of vision. It is more like business vision. You guess what is going to be big (cloud computing? dunno) and then focus your technical development in that direction.

    There is absolutely nothing wrong with that. But really, it is very different from a person asking “What to learn to become a better programmer” (in which case, choose which technolgy that fits your passion, as Buu Nguyen pointed out). It is more like “What part of IT should I learn to become more successful, making more money”.

    However, in the early stages, the answers to these 2 questions are still more or less the same.

  8. Khang Vo said, on December 27, 2009 at 7:03 am

    Thanks for your idea of learning fundamental will help us to go much faster in the road. I absolutely agree with that. The question only matters if you are strong enough to learn new things.

    I may need to have some deeper discussion about that idea that using C+pascal to be professional in data structure and algorithms will make sure that you will move extremely faster later. However, I had a plan to write some blog about that rather than here.

    Yeah, the vision is proportional to your strength, but as I already stated that it requires time and effort to always practice. My key is to analyze a thing before you learn it and try to guess whether I should learn it now or later when it is really the time to learn. Yeah, it may not matter which one will make me a bigger success, the idea is I can know how to guess what’s next.

    This one is not so related to the question :”What to learn?” but also a big thing about vision. Look at Google and Microsoft. They are both successful, the big successes. Which one is considered to be more successful now?Most of the answers may be Google. There are many factors that contribute the success of Google. But one key thing is that Google do it before Microsoft comes. When Microsoft is there, the reputation of Google is too big, too late for Microsoft.

    Is search engine of Microsoft successful in terms of technology?Yeah, it is great. But now, reputation is the key and Google already got it:). So, I think, no matter what you do (even in case of learning), sooner you come and be master, you will get more benefits than the later guys.

    • ltvan said, on December 27, 2009 at 4:56 pm

      @Khang:
      > Is search engine of Microsoft successful in terms of technology?Yeah, it is great. But now, reputation is the key and Google already got it:). So, I think, no matter what you do (even in case of learning), sooner you come and be master, you will get more benefits than the later guys.

      Agree but not totally. Microsoft is the later guy many times and some of them make very big success. For example the graphical user interface from MacOS, .NET Technology (~ Java), etc. Another example is Facebook.

    • ltvan said, on December 27, 2009 at 5:17 pm

      One more thing, you should narrow the area of success. I understand that you talked about search engine. But on the general, Microsoft is still the most successful company right now.

      Google is also later than others in many areas. It’s not the first search engine in the world. It’s also not a first email service provider.

      I agree with serivn. Business vision is different with identifying “What to learn”. When GMail comes out to market, nobody knows about AJAX although it’s just an combination of old technologies. How can you learn if it does not exist (or be invented)? In the business world, you must be always creative to be the lead.

      • Khang Vo said, on December 28, 2009 at 1:39 pm

        @ van and serin: yeah, I agreed that this is a different kind of vision as I already stated that it is not so relevant. However, It was my bad not stating so clearly
        @van:
        I only said that we will at least get some benefits if we release at the right time and before other people. It is not absolute that doing sooner will win (think about doing too soon and it is not mature yet).

        For the example only, .NET has its reputation because of the reputation of Microsoft. If .NET come out even before Java and at a good time, maybe Java can not become this successful

        Yeah, it is absolutely right that you can not learn if it is not there yet. How about learning things still in the research lab, not mature yet and applying it successfully?. examples can be Powerset (semantic search engine), now acquired and fully supported by Microsoft.

        We may think again about Search Engine example in technology aspect, Google Search Engine becomes successful because it is the first guy offering a democratic page rank algorithm. In some aspect, we can consider that when those guys do Phd in search engine, they know that this is the time search engine with that page rank algorithm become mature (the real truth, we don’t know). This is the reason they design and architect their systems (at first, this is just a research for their Phd) so that the system can be released out to industry
        More details can be read here: http://infolab.stanford.edu/~backrub/google.html

  9. Quốc Anh Trịnh said, on December 25, 2009 at 7:28 am

    And I would like to add that it really doesn’t matter which one you pick at that moment – I agree with Buu Nguyen.

    You may think it is the key thing that will determine who will succeed, who will not. This cannot be further from the truth.

    Most IT concepts are transferrable. Say you start out with Java doing Struts but later the market dumps Struts completely and everybody uses Ruby on Rails. That would never hurt a Java expert.

  10. Quốc Anh Trịnh said, on December 25, 2009 at 5:59 am

    @Khang Vo: Your idea is good but as you already noticed, unfortunately you can’t tell what to learn if you are already somewhwat competent. Your vision is proportionate to your strength.

    I would start with the basic. Stay behind the crowd for a moment. Let’s ignore all the coolest things in the market. You go on your own journey, doing algorithms exercises with C or Pascal until data structures and algorithms sound like your key strength.

    1 or 2 years later, just pick something that smells good and go into great depth with it. You will notice that you are moving much faster than other people who are learning the same thing but skipped the fundamentals.

  11. ltvan said, on December 14, 2009 at 4:57 pm

    @Buu Nguyen: Agreed. We will be left behind if we don’t update our knowledge.

    I also agreed that my saying could make people confusing. Just make clear that my need is not just the job need or the business need. I have my own favorite area and I keep myself up to date in that area just because I like it.

    I also keep myself moving on the way of learning because it’s not a dead-end. It’s a long long journey that you could find new interested things everyday.

    @Khang: Yes, vision is always important. What I mentioned is all about the other side: if you don’t have that good vision, losing an opportunity to have a better job is less severe than losing a business.

  12. Khang Vo said, on December 14, 2009 at 2:46 pm

    @ltvan:

    For jobs, imo, vision is still an important thing. Because, people always try their best to go advance, by changing to bigger companies/more challenge jobs/higher position. Changing to bigger companies such as Google (dreams of many developers, including me) requires a good vision as well. According to my know, in Google, people not just finish their task but also they can create their tools/projects themselves. Now, for developers/ software engineers, they have to think, they have to see advance the needs in the future. So, everybody now needs good vision regardless of what jobs they are doing (managers, marketing, software engineers, start up). It is absolutely sure that this ability does not come as a nature, it is a practice over and over time. If we do not start now, it becomes too late for us in the future when we really need it.:)

    @buu:

    Yeah, I agreed that boosting an even single brain cell is not an entire waste, but it will be better if we waste less. The best thing should be learning from that waste and avoid it in the future. A real expert in an area and we become competent and high reputation but everybody always wants to become better

  13. Buu Nguyen said, on December 14, 2009 at 10:46 am

    Both are critical questions. Nobody can keep up with everything, but at the same time, it’s not quite right to say that “I’ll only learn things as needed because I already know how to learn”. The thing is, if you don’t actively learn for a period of time, you will be obsolete. LOST. (Think of a smart caveman coming into the civilization.)

    What-to-learn is context-specific. What-to-learn for me is not what-to-learn for anyone else. What you learn should fit your passion, career development goals, company strategies etc. And as long as that thing you choose to learn can strengthen even a single brain cell of yours, it’s not an entire waste. Whirl the clock back to 5 years, does it really matter if you pick to specialize in Ruby, Python, or Java? I don’t think so, as long as you’re an expert in some area then you should do fine.

    How-to-learn is also context-specific (although more about self). For me, and prob. many others, it’s about reading good books (before doing anything else). For others, it maybe about having good mentor/coach, reading good blogs, attending good seminars, or immediately putting the things in use etc. Understand yourself is the key to effective learning.

  14. ltvan said, on December 14, 2009 at 7:18 am

    That’s correct. You pointed out the main issue of many companies. That’s an essential question to grow a business. To answer this question, you must have an ability to “see the future”, i.e. you must learn to have a vision toward the market need.

    Until you have that ability, if you can learn a thing in 1 day, or 1 week, you can still win the deal. The higher complexity the technology is, the higher risk you take. If the risk is too high, you can choose to reject the deal and consider whether you should prepare for that new technology or not.

    If the deal is a job, I think that is not a big problem. If you plan to have your own business, that’s a risk that you must deal with.

  15. KhangVo said, on December 14, 2009 at 2:32 am

    I agreed that understanding the basic of the problems and solutions will help you a lot in learning quickly. However, the problem with “What to learn next” still remains there. You said something about “Learning when you need”.

    The problem is still in “When”. Our world is not static, it changed a lot overtime and when new thing appears, there may be more and more competitors over the time. Now, the problem is that we must be competent in 2 things: productivity and reputation. And the sooner you are in the area, the higher reputation you will get. For example, when clients ask “I want to do this stuff, does anyone have good people to implement it”, we can raise our hand and say “We already had many experienced programmers in this area.” Others say “We may have some experienced programmers in next month to do this”. Who wins? And after some time working in that area, our reputation is high enough so that nobody can compete with us.

    The question “When” is challenging, if we learn it too soon and it will not be popular, it is somehow useless. If we learn it too late and everybody in that area, we have little chance (and money as well) while joining and competing in that area.

  16. ltvan said, on December 13, 2009 at 6:41 pm

    To me, my answer for the question “what to learn?” is “how to learn?”. Once you master it, you don’t have to answer the question “what to learn?” any more. You can learn things as your need. You don’t need to learn everything ahead except that you know clearly and certainly that you need it.

    My way of learning is all about the nature of things. “Why” and “What is” are two questions I always ask myself. When you know the nature of something, you can extend your knowledge to related areas easily and quickly.

    For example, when I learned about Pascal, my first programming language, I went deep inside the nature of programming language and C++ doesn’t introduce many new things to learn. I used to write OOP in Pascal by reading an OOP book for C++ developer without any knowledge about C/C++ at that time, although I changed my mind after a while since I feel more interested in C++ when reading that book.


Leave a reply to KhangVo Cancel reply