Profile cover photo
Profile photo
b bundi
time traveller
time traveller

b's posts

Post has attachment

Post has attachment

Post has attachment

Post has attachment


Every so often I am asked the following question:

“I am a student / hobbyist interested in learning programming. What should I learn?”

“Should I learn python / Java / Ruby / C++ / C#, Android, PHP etc.”

The answer is NONE OF THE ABOVE.

Let me attempt to share what i think are foundations of a successful career if its your profession, or a solid grasp if you are a hobbyist

The foundation of everything is a course called “Algorithms and data structures”. Take this course very seriously.

Further, the best programming languages for practice in that particular course are C / C++ and Pascal.

Not Java. Not PHP. Not Python.

Why? Two main reasons:

1) The basic environments have zero bells and whistles. You must implement everything yourself
2) Pointers

Think of them as the equivalent of learning the fundamentals of an internal combustion engine. Takes long. Requires work. Requires effort.

But once you do - you are at home with most engines that are thrown your way. You just need to read the manuals to figure out where stuff is

Once you have grasped those fundamentals it is easy to migrate to productive languages like Java and C# and python and the rest.

There are tons of books and free online courses on data structures and algorithms. Make use of them.

And yes, when I was in uni many years ago i thought it was nonsense learning pascal and C when there were so many new languages.

A career later I see the point & the benefits of going down that route.

There is always a shiny new language. But fundamentals NEVER change

Second thing you need to learn is object oriented programming. Classes, objects, interfaces, methods, etc

Third thing you need to learn is discrete mathematics. In particular logic, geometry, sets, graphs.

If you want to do more interesting stuff - probability, algebra, calculus, operations research

Third thing is architecture - how do you organize your data structures and algorithms into a coherent program / suite or programs

Fourth thing is source code control & management & management - use of tools like git, mercurial etc and other tools like GitHub, bitbucket

Till there you should have a good foundation for a reasonably successful career either as a professional or as a hobbyist.

If you really want to push the envelope you can check out these
1) Functional programming paradigms & languages - LISP, F#, Scheme, OCAML

2) Analytics and statistical tools - R, Julia, Octave, Matlab = for data science and number crunching

3) Databases - set theory, relational theory, structured query language (PL-SQL, T-SQL, etc)

4) Web programming - HTML, CSS, Javascript, HTTP, server side languages

5) Mobile programming - Android, Xamarin, iOS (Swift / Objective C)

6) Low level / operating systems / device drivers / IOT programming - C / C++, Rust, Go

7) Massively parallel programming - CUDA, OpenGL

There are a few others but i forget them at this point.

Again I stress - fundamentals. You must have a firm grasp of the fundamentals. Or you will be unable to adapt to this industry.

There is always a new language , new framework, new way of doing things. They change at an alarming pace.

With a firm grasp of fundamentals you know what to expect in an implementation. All you need is documentation to find your way around.

Web programming and mobile programming IS STILL PROGRAMMING. You still need to know how the plumbing works.

Ask your favorite web developer if they know HTML. Then ask them if they know how HTTP works.

It is true you can get away without knowing any of this stuff thanks to all the wizards and frameworks - eventually you will be caught out

And finally, and most importantly, learning programming of any kind requires investment.

1) Time
2) Effort
3) Dedication
4) Practice
1 reply 14 retweets 7 likes
Count Dracula‏ @roomthinker 15h15 hours ago

You are not going to learn this stuff after a two day course with lunch and tea breaks.

The only way to learn is to do it. Again. Again

Continuous improvement. Continuous learning. Better yourself. Take initiative.

After a career in the trenches i can tell you for 95% of the time, the language you use to program is irrelevant.

The actual expression is not your source code - it is your mind.

Picasso will still paint a masterpiece even if all he has is a cat’s tail

But having said that here are guidelines of what you should have a grasp of to have a long career programming

1) A strongly typed language - C++ / Java / C# / Go

2) A loosely typed language - Python, PHP, JavaScript, etc

3) A functional programming language - LISP, F#, OCaml

4) At least two domain specific languages - and here I strongly recommend Regular Expressions and SQL

5) Unit testing & mocking

6) Design patterns

Last but not least let me repeat what i have been telling my teams for years

“Your work is to THINK. Writing code is but one of your tools”

Post has attachment

Post has attachment

Post has attachment

Post has attachment

Eiichiro Oda

Wait while more posts are being loaded