Most important concepts to learn for a new developer (Top 50)

General discussion for topics related to the FreeBASIC project or its community.
vdecampo
Posts: 2992
Joined: Aug 07, 2007 23:20
Location: Maryland, USA
Contact:

Most important concepts to learn for a new developer (Top 50)

Post by vdecampo »

I would like to poll the FB community of developers to create a Top 50 list of topics that you think a new developer should learn. This can include simple things like binary and hex numbers to more complex concepts like polymorphism and multi-threading. The goal is to create a curriculum that would take a developer from zero knowledge to ready to work professionally. I would prefer topics to be independent of any one programming language. Im at work now but I will add my $.02 this evening....

Ready?

Go!

-Vince
fxm
Moderator
Posts: 12081
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Most important concepts to learn for a new developer (Top 50)

Post by fxm »

The difficulty is that some topics deal with features before, during and after their developments (or bug fixes), so that some non-recent codes no longer work or vice versa and their associated explanations are now obsolete.
I do not think we can easily say "to take into account only from such date".

Some topics are thus the memory of the development path of some features.
Is this useful for a new developer?

I am thinking in particular of subjects like "inheritance", "virtuality", "polymorphism", "byref (data)", "boolean type", .....
srvaldez
Posts: 3373
Joined: Sep 25, 2005 21:54

Re: Most important concepts to learn for a new developer (Top 50)

Post by srvaldez »

I am an amateur at best so here's my $.0001
I find that too much preliminary study before you get to practice is like an insurmountable obstacle, I think small steps plus practice is more stimulating.
Trinity
Posts: 214
Joined: Sep 16, 2017 17:07

Re: Most important concepts to learn for a new developer (Top 50)

Post by Trinity »

In my opinion then the way that people learn most is learning by doing and thus get interested to learn more to be able to do more - if they have the right attitude...
Then , not to sound negative but in my opinion then all the RAD environments that people uses today are far too complex to learn anything real about in an easy manner. Sure one can be taught to drag and drop stuff onto a canvas , but even that takes knowledge of property settings and what not, so the most basic of input and output becomes a complex task.
And in the end for what ? I mean there is quite a long way from dragging and dropping stuff onto a canvas and then to be able to read and alter the generated code. Thus I think that people interested in learning to program ought to learn basics of a programming language that will lead them to be able to program other than using a drag and drop RAD development interface.
I do not know to what extend that learning FreeBASIC would be of help to someone wanting to learn to program if they late had to switch to C , C++ , C# , Java , Java Script , whatever or if it would be beneficial..... What I do know is that I think that FreeBASIC at a glance looks far more accessible to me than others just mentioned. But I am not sure if it would be beneficial to start with or if it for some reason would be better to pick something else to start with if one later wants to program in the other programming languages that are used commercially.....

Anyway , I think that the absolute first thing to do should be to pick the right programming language for the person , I mean something that they would like to use. That sounds as an easy task but I think that in reality due to the nature of the world and the fact that people most often knows very little about the program language to start with then a lot of people end up having to shop around a lot until that they find something that fits them....

Anyway , following my train of thoughts then a "Hello 'world" is as good a place to start as any : https://www.freebasic.net/wiki/wikka.ph ... HelloWorld (though I think that it is possibly missing a "Sleep" command to keep window open for a beginner , same goes for all examples in Primer #1 except one)
And with respect to FreeBASIC then next FreeBASIC Primer #1 : https://www.freebasic.net/wiki/wikka.ph ... oPgPrimer1
Translated to programming languages in general then that would be stuff that gave people an avenue into playing around with stuff/code themselves to give them more interest and to show them why they ought to learn more.

On the other hand then I think that most people have completely unrealistic expectations when they first start out and think that they will make whatever software or game in no-time and that many gets discouraged when they finds out that it actually is a lot of hard work and that not everybody can make a living out of making "crap-ware" (I mean that there might have been or be some market for that but I also believe that people are getting increasingly feed up with it) .
I know that in these days many places they are aiming at making computer programming a common skill and also try to bring it to the masses. And while I think that it's a good idea to present it to e.g. both sexes (e.g. ref . : https://girlswhocode.com ) and to e.g. the under-privileged (e.g. Ref. : https://coderdojo.com ) then I also deeply believe that coding/computer programming is a "nerd"/"geek" thing which takes a certain personality for it to grow/stick....
Trinity
Posts: 214
Joined: Sep 16, 2017 17:07

Re: Most important concepts to learn for a new developer (Top 50)

Post by Trinity »

srvaldez wrote:I am an amateur at best so here's my $.0001
I find that too much preliminary study before you get to practice is like an insurmountable obstacle, I think small steps plus practice is more stimulating.
My opinion exactly (see my post above for more info) :-)
caseih
Posts: 2157
Joined: Feb 26, 2007 5:32

Re: Most important concepts to learn for a new developer (Top 50)

Post by caseih »

Even seasoned experts find multi-threading very difficult to get right. So I'm not sure a new beginner should concern his or herself with multithreading!

As for OOP, I'm not sure that's an essential beginner topic either, but if it is, the most important concept to understand is the difference between the "is a" and "has a" relationships. In other words inheritance vs composition. Also when OOP is appropriate and when it's not. Java has done a lot to introduce the masses to OOP, but it's rigid insistence on Classes as the sole method for structuring programs has done a lot of damage to new programmers, making them not realize there are a lot of ways of structuring a program, some more appropriate than others.
TeeEmCee
Posts: 375
Joined: Jul 22, 2006 0:54
Location: Auckland

Re: Most important concepts to learn for a new developer (Top 50)

Post by TeeEmCee »

Learn to break a problem into pieces and to abstract, probably the most important programming skill. You're going to need to read lots of good code, and then a lot of trial and error to learn what a good abstraction layer looks like. Read Joel Spolsky's essay on leaky abstractions!

Well, if that isn't the most important skill, debugging is. Learn several different ways to debug. Learn to use a variety of debugging tools such as debuggers, memory debuggers, profilers, call tracers, static analyzers (good tools aren't as important as your wits when debugging, but I love it when I can solve what should have been a real headscratcher in 60 seconds flat by using valgrind)

Learn to use development tools such as a good programmr's extensible editor or IDE, grep, version control.

Learn LISP :) Or a least a variety of programming languages.
fxm
Moderator
Posts: 12081
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Most important concepts to learn for a new developer (Top 50)

Post by fxm »

For my part, I never use debugging tools, and yet I have easily succeeded to debug very many programs and often not to me.
caseih
Posts: 2157
Joined: Feb 26, 2007 5:32

Re: Most important concepts to learn for a new developer (Top 50)

Post by caseih »

I guess I've never understood the aversion to debuggers. I've always used debuggers since Turbo BASIC days. I find they are invaluable for tracing code and really understanding what's happening. Especially for a beginner. Conditional breakpoints and being able to view the call trace are extremely powerful tools.
fxm
Moderator
Posts: 12081
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Most important concepts to learn for a new developer (Top 50)

Post by fxm »

This is probably due to a bad habit taken since a very long time when I started to program in 6800 assembler for many years without any possibility of debugging.
After I went to Basic on CPC Amstrad 6128 (without always debugging possibility).
Then I commuted to Quick Basic, but that bad habit was already taken!
grindstone
Posts: 862
Joined: May 05, 2015 5:35
Location: Germany

Re: Most important concepts to learn for a new developer (Top 50)

Post by grindstone »

For my part, the most important debugging "tool" is the PRINT command (either to screen or to file), occasionally in combination with SLEEP and END.

I've checked out several tools and methods, but mostly I came to the conclusion that the efford exceeds the benefit.
dafhi
Posts: 1640
Joined: Jun 04, 2005 9:51

Re: Most important concepts to learn for a new developer (Top 50)

Post by dafhi »

@TeeEmCee - thanks for the excellent search topics: leaky abstraction, and LISP. Had a quick glance at the former, and discovering it's something I've abstracted myself, I think some people are onto something! Checking out Common-LISP atm
caseih
Posts: 2157
Joined: Feb 26, 2007 5:32

Re: Most important concepts to learn for a new developer (Top 50)

Post by caseih »

fxm wrote:Then I commuted to Quick Basic, but that bad habit was already taken!
A shame because Quick Basic had an excellent debugger and the intermediate window was an amazing debugging tool as well. You could stop the program, then run expressions in the intermediate window and query live data from your program.
TeeEmCee
Posts: 375
Joined: Jul 22, 2006 0:54
Location: Auckland

Re: Most important concepts to learn for a new developer (Top 50)

Post by TeeEmCee »

Yeah, the QBasic (IIRC QuickBasic was compiled only?) debugging experience was awesome. I'm still trying to figure out how to allow live modfiication of running code at the line-level in my own scripting language.

I didn't mean to say that debugging tools are necessary. I often find that using gdb is a waste of time and it would have been faster to use PRINT.
Oh, I could also have mentioned reverse debuggers (although these are certainly far outside the set of core topics!). The idea is that you wait for the bug to happen (eg the program dereferences a null ptr) and then you reverse time and go backwards to find out what went wrong (eg. jump to the point this ptr got set to null). gdb does have a builtin backend that supports reverse debugging, but it's sloooow. rr is a highly efficient reverse debugger (an extension to gdb), it looks game-changing. But to be honest haven't used it yet. (Edit: but don't get your hopes up, because it's a giant clever hack its Linux on Intel only)

As for LISP, well people have been saying for decades that learning LISP broadens their ideas about how programs can be written. But to be fair modern languages have now incorporated most of the good of ideas from LISP. Common LISP itself is so full of cruft left over from the 60's, and I miss infix operators, so I find it dreadful to use. So instead, look at modern functional or dynamic languages.
grindstone
Posts: 862
Joined: May 05, 2015 5:35
Location: Germany

Re: Most important concepts to learn for a new developer (Top 50)

Post by grindstone »

This seems to become a real interesting topic. :-)

My thoughts so far:

The most important for a new (volunteer) coder is a quick sense of achievement like the "Hello World" - classic to show him (or her) "Yeah! This device obeys me!"

The next thing is to get the basic knowledge of computer programming like binary/hex numbers, data types, boolean algebra, loops, jumps, procedures, file handling etc. IMHO this is the list we should try to complete first of all.

With this growing knowledge the novice has to develop and increase the skill to (in principle) translate a given quest to a working source code.

And beyond this point it becomes difficult to create a generally valid list of things to learn, for it depends on what kind of software you want to write. E.g. for programming CNC machines it is essential to know about the Bresenham Algo, while is's quite useless for a bookkeeping software.

And a philosophical question: It's sure possible to write programs without any clue of the internal architecture of a CPU. But will one ever become a good programmer without that knowledge?
Post Reply