Do not fall in the learning curve!

TL;DR;

English: Carlos Sastre climbing up Alpe d'Huez...

The top is close or not ...

As a software developer, one of the main challenge I’ve met is to find good resources and feedback to keep my learning curve at a certain level: not steep enough to be frustrating, not low enough to be stalling. There are plenty of ways to do it, especially when it’s the first time you learn a new programming language. After a certain level, it becomes far more complex and slow. I had that frustration and tried to find good solutions. I’ll share that experience.

My journey as a C and C++ developer

At the beginning, I started with C. I learned it before the university mainly by reading tutorials on the web. At the university, I started C++. The courses, the projects and the practical works were good sources of learning. They mainly gave me a list of topics to dig and experiment, and the practical works were the best place to have a quick feedback depending on the teaching assistant.

English: A selection of programming language t...

Old good paper books.

During my engineer studies, I read more rigorous articles on the web and the big classics including C Programming Language by Ritchie and Kernighan or C++ Programming Language by Stroustrup.

After my graduation, I reached a learning plateau. I missed someone with a better knowledge in C++ to give me insight and path of progress. Hopefully, I met him at the beginning of my PhD. He advised me books, content, people to read or listen (e.g. Herb Sutter, Scott Meyers), or tools but moreover I had someone to discuss the challenges and potential solutions. Even today, it’s still someone I come back when I’m struggling with complex problems in C++ or design. During that period I especially learned the benefits of tooling like linter, static analysis, profiler, not only in terms of code quality but also in terms of learning. They underlines problems I wasn’t necessary aware of and give me a point to learn and improve.

The other way I progressed during my PhD was by teaching. When teaching something, you need to clarify and refine your understanding in order to communicate it. Moreover, you need to know the bounds and the exact internal working. It forced me to dig into some topics like the STL.

After my PhD, I worked as a freelancer. In most of my contracts, I was the only developer. Of course, as before, I’ve still read on the web and googled, but when I was facing a big issue for too long, my best solution was to discuss it with one or another friend C++ developers.

As a Ruby developer

I’ve learned and practiced other programming languages such as Java or Python (or BASIC a long long time ago). Roughly one year ago, I’ve started to develop, notably, in Ruby for 8th color. I’ve met another kind of learning challenge.

Official Ruby logo

Shiny!

As a polyglot developer with some substantial experiences and knowledge, I learned the basics quickly. With my level, I’d expected to learn enough knowledge to write not so crappy code. But even if there is a common pattern between programming languages and the algorithmics fundamentals are still the same, the idioms are different, the ecosystem is different, the tools are different, the learning sources are different. I still have a lot to learn and experiment to reach a satisfying level in Ruby.

Even if it exists great active learning resources such as code school or codecademy, once I’ve finished them, I was far from what I’d expect as minimum level. It took me time to find the good blogs and the good tools. It was interesting but not essential for my progression, I’d have prefered to spend that time to learn about Ruby itself. Hopefully, Martin learned Ruby in a same time and I had someone to discuss and share with.

The way to learn

From my experiences, I’d summarize the different ways to learn as following:

  • books, blog posts, tutorials, podcasts, conference talks
  • forum, stack overflow questions, mailing lists
  • interactive applications (code school, codecademy, robot war)
  • tools (linter, checker, static analysis, profiler)
  • close developers (colleagues, friends, coach)
  • developers (forum, stack overflow, mailing lists)
English: Level/Time of competence when learnin...

a model of learning slope (Photo credit: Wikipedia)

All of these participate differently to your learning. If well chosen and used, they have all their utility for any expertise level. For instance, tools and close developers are very good to support active learning, i.e. learning by doing. Interactive applications are certainly the best for a beginner. Books can present very introductory materials as the more advanced, but they’re only passive knowledge.

I can probably spend another blog post to describe their benefits and drawbacks, and categorize them according your level. But I’d prefer to underline something else first: having the right feedback at the right moment.

The learning challenge for a developer

I used to be the typical profile of lone developer: no pair programming, no team, no senior developer. I need to rely on myself and on some close and trustable peers. In learning, it’s not an uncommon situation. You cannot rely on someone else to support you and give you good feedback to frame your learning. Sooner or later, you’ll inevitably wander in the dark. It could be because the content you’ve found it’s not good enough, or simply because you don’t know where to go first. I’ve experienced it as an experienced C++ developer and as a beginner Ruby developer. It’s a big frustration.

It’s a kind of situation you can also meet even when you’re working in a team, especially during stressful phase with close deadlines. You don’t have always someone available to answer you when the question pops out. If it’s a stupid one, you probably don’t want to interrupt them as the flow is important.

I’ve discussed that learning challenge with several developers. It’s usually accepted that it takes time and having someone helping you is a must. For me, the time is certainly a pain, but my biggest frustration is the loose and inadequate feedback for my level. My best learning experiences are when I’m facing a certain problem, I find the good blog post discussing the problem, and I can finally try it and implement a solution.

What are your experiences? Your biggest pain? What are your best learning mean? How do you keep improving year after year ?

Enhanced by Zemanta




4 thoughts on “Do not fall in the learning curve!

  1. Aureliano Nava

    Christopher,

    I teach high school social studies but over the last year or so I have been learning to program. I will still continue to teach history, yet I wish to be able to provide the inner-city students I teach with marketable skills and, at present, programming is such a skill. The language I’m focusing on is Ruby and it’s Rails framework, diverting learning to other essentials, as time allows, as HTML5. I have picked up enough basics to teach an introductory high school programming class yet feel much pressure to accelerate my learning. You article therefore touched a core with me. It’s a critical subject and I would encourage you to write more on the topic, especially the importance of having a mentor and/or the concept or apprenticeship as a vehicle for acquiring proficiently with programming.

    I’ll follow you on your tweet.

    Reply
    1. toch Post author

      Thanks Aureliano for your comment and for following me

      Currently, what do you miss more in your learning? A Mentor? Is a clear path/guide of learning would help you? Or do you need more help when you’re practicing?

      Reply
  2. Harisankar P S

    Having mentors or peers to assist you, while you learn is the best way to learn programming, Another important item to know why learning, is to how to properly ask the doubts such that the person reading your issue or email can clearly understand your issue and help you.

    Reply
    1. toch Post author

      Good advise. Communicating the doubts is an important element for the helper.

      I’ve observed that it’s a point that makes the difference between a beginner and advanced developer. Stating well a doubt is often the first good step that you can do when looking for an answer. However, when you don’t have enough knowledge even to express correctly your doubts, they will be too vague. At that time, IMHO, I think is then the work of your peer or mentor to do the difference. By asking good questions (They know which one to ask), they will help you to express what’s your problem.

      But if you don’t have mentors or peers, how do you do, Harisankar?

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>