DEV Community

Joseph Jude
Joseph Jude

Posted on

A framework for learning for programmers

I graduated in 1994. COBOL was the popular programming language at that time.

  • Then came DBase
  • Then FoxPro
  • Then Power Builder
  • Then Visual Basic

Every time a new language came in, it brought associated technologies, like ODBC, COM, ATL, and so on.

In 90's, packaged solutions like Vantive and Peoplesoft started appearing. SAP was another popular packaged solution at that time.

In the last few years, new programming languages started to surface โ€” Swift, Go, Scala, and so on.

Why am I recounting the history?

In software industry, only one principle remains true: if you are not updated, you will be outdated.

I have gone through this cycle of learning new technology over and over again. As I repeated this cycle, I noticed a pattern. I have fine tuned that pattern and developed a systematic approach to learn new language or technology.

Learning Framework

Learn

First part of the system is learning. You learn by reading books, blogs and other's code.

Books

Generally I avoid books on programming languages, unless I wrote them ๐Ÿ˜€. I read books on architecture, design, and process. Recently, I subscribed to Safari Books Online, which has a huge collection of technology books. Here are some of my recommendations (You can look at all the books I have read):

Blogs & Sites

Books are good to learn established ideas. They are not good enough to keep up with a fast changing industry like software. To keep up with the latest thoughts in software, I follow the below websites:

I subscribe to them and read with Feedly.

Newsletters

If you don't have time to visit these sites, you can subscribe to well curated newsletters. I am subscribed to two such newsletters: Node Weekly and Software Lead Weekly. SLW is an awesome curated newsletter for everyone in software industry. For other weekly newsletters, refer Awesome-Weekly repository.

Code Repositories

Before Internet became ubiquitous, it used to be impossible to get hold of well written code to read. Now it is easy. You can browse GitHub and you will find well written code for any type of software โ€” server, compiler, languages, and applications.

These days I focus on nodejs. So here are some nodejs related repositories:

  • Node.js - a server-side Javascript runtime
  • Typescript - a superset of JavaScript that compiles to clean JavaScript by Microsoft
  • Hapijs - a nodejs based web-application framework by Walmart
  • d3.js - a JavaScript library for visualizing data
  • Bootstrap - a HTML, CSS, and JavaScript framework for developing responsive, mobile first projects
  • Hexo - a static blog generator
  • Punch - another static blog generator
  • Ghost - a blogging platform

You can also browse many "awesome" repositories, which are curated repositories. Here are some:

Experiment with side projects (for learning)

Learning is only one aspect of learning. If you want to grasp the concepts and internalise them, then you should try them out.

Have a side project to try these concepts. Keep it small enough that you can complete it in few weeks but large enough for you to learn. Purpose of these side projects aren't to create a complete application or to make money. Only to learn.

Here are some of the ideas to get you started with side-projects for learning:

Take a look at 52 technologies in 52 weeks. Shekar tried a new concept every week in 2016 (he did only 43 projects, but still it is commendable streak). You can try the same concepts in a language of your choice.

If you are starting out, then you can try to solve Euler problems in your language of choice. That way, you will learn both algorithms and a programming language.

Justin Jackson went crazy and made 100 things in 2016.

If these are overwhelming, you can create one project per month.

All these are means to an end. Choose whatever formula โ€” 100 projects, solving Euler problems, one project per month, but commit to do it for an extended period of time. Exercise your mental muscles with these experiments.

If you think you don't have enough ideas, browse through Ideas Watch and Idea Space. Both of them are about startups, but you could still pick up enough ideas for a side-project from them.

As I said earlier, your intention for side-projects is learning. So don't worry too much about quality. When you are learning, quantity trumps quality.

Share & Engage

Share. Share what you learn. Share using Github, or using Medium, or using your own blog. It's about paying it forward. But also it helps you engage with others who have done it or doing it. The first kind will let you know if there is a better way of doing than what you have done. The other kind will ask you clarifying questions when they do it. Both will help you strengthen your knowledge.

Keep learning

We all know, software is eating the world. As it expands its reach, we'll have to learn more and more. If you formulate a system, you can learn quickly.

Keep learning.

Discussion (19)

Collapse
i3ryi3e profile image
I3ryI3e

Great post! Thanks!

Collapse
ben profile image
Ben Halpern

Great post Joseph. A lot of the thought behind dev.to is to take the sorts of resources and strategies you've outlined and help streamline some of it over time. I will keep referring to this post as a guiding light in its development. Thanks a lot.

Collapse
daveblythe profile image
Dave Blythe (he/him)

Ben, I have to agree (or at least reinforce and provide you some feedback).
From the couple months that I've been involved and following along with what dev.to has been sharing... I'll confirm that you are in fact doing some of what you intend to. In my own perspective, you've quickly jumped to the top 2-3 places I look to for 'healthy reads'. Keep up the great work!

  • Dave
Collapse
millebi profile image
Bill Miller

If I may add a small suggestion: When learning new things, make sure to "spread" them around within a field.

For example: If interested in data, play with a new database (Btree, NoSQL, BigTable); when interested in a new programming language/tool, cycle around between low-level (assembler-ish), high level (Ruby) and "strange" (Prolog). You may find history repeating itself in new ways.

It's amazing how many concepts from one area are implemented/expressed differently in another area. You may discover that something you learned in Lisp is applicable to data analysis and data storage. Sometimes the connections you can make after "playing" with a number of things can be astonishing. You'll essentially become a "renaisance man/woman" within technology. If you really want to expand you're knowledge of "uncommon things" then mix in some hardware once in a while and look into automotive or something mildly related for interesting ideas and problems.

I personally am at 30 languages doing just this and have found the ideas for implementing solutions in any technology can be profoundly interesting when mixing in ideas from what would be considered "unrelated" areas

Collapse
bgadrian profile image
Adrian B.G.

So true.

You must realize that there is not enough time in a lifetime to read (not speaking of understand and practice) all the literature behind computer science, although is a new one, only 60yrs old. So I recommend choose the battles you can win.

For example, I'm interested in data engineering, after watching hours of panels and tutorials I discovered all the papers in the field since 1977, so ... ofc I will not have time to go trough all of them.

If you do the math (8h work + 1h launch break + 1-2h commute + 7-10h sleep) and deduct the time of family/hobbies/actually living you don't have much left for personal development, so choose on what you are spending it carefully.

I'm a web generalist, I scope trough many fields and I stop at a certain point. Especially when frameworks/tools are involved because the env changes so fast I realized I would waste time being an expert in just one of these (ex: react, jenkins, docker ...).

As an addition to the article I recommend YouTube panels from conferences and meetup.com.

Collapse
mirknn profile image
Miriam Keenan • Edited

Yes! Sometimes it's difficult to find time to keep creating new things and learning. I guess our biggest flaw is how well we are able to talk ourselves out of taking the most productive step. Well, that's mine anyway!

I'm actually doing the #100daysofcode challenge, literally only started. I think there's a better chance of getting stuff done now that it's public haha.

Collapse
daveblythe profile image
Dave Blythe (he/him)

Great stuff, Joseph!
Having been 'between positions' long enough to start to fret about my market-ability... this is probably the most important/relevant thing I'll read, this week.
Great suggestions, and I especially enjoy the graphic.
Thanks for sharing with those of us in the 1-3 year 'scary times'!

  • Dave
Collapse
kr428 profile image
Kristian R.

"In software industry, only one principle remains true: if you are not updated, you will be outdated."

Word. Couldn't have said it better. ;)

Collapse
anasmk profile image
Anas Kanhouch

thanks for this great post

Collapse
vduglued profile image
Aaron Pollock

I need to get my act together in this department. I read a lot, but don't build or write a lot outside work yet. The "X things in X weeks/months" links are interesting.

Collapse
nsdz profile image
NSDZ

one of the best posts i've ever read, great post sir โ™ฅ

Collapse
amin007 profile image
amin007

Now i learning from YouTube

Collapse
abhinavgalodha profile image
Abhinav Galodha

Wise words and great Advice.

I agree that it's important to unlearn old things and learn new things...

Collapse
brovic profile image
Victor Ordu

Excellent write-up!

Collapse
deden profile image
deden

Great post, thanks for share it.

Collapse
elcotu profile image
Daniel Coturel

I think your approach is very useful.

Collapse
nawazishtwiter profile image
Nawazish Khan

Amazing post, almost answered everything I was looking for.

Collapse
umeshdhakar profile image
Umesh Kumar Dhakar • Edited

Great post. Thank you for sharing.

Collapse
mario21ic profile image
Mario J. Inga Cahuana

Nice post, thanks for share it