Jump to content

Career advise (programming)


riyarathi

Recommended Posts

Hello everyone, I am new to this forum. I want to know about the best way to learn something new on programming.

What should one do for learning? Should one read more and more books, take some online courses, make his own notes or code as much as possible? And what is the proper order to do these.

Thanks in advance.:)

Link to comment
Share on other sites

Moved to off topic.

This question is very broad, and what works for one person, might not for another... To learn how to make working programs, you have to learn the languages and basics of programming, which usually means books. Nowadays getting information is so easy, and you have tons of free articles, books, tutorials, open-source code etc. to learn on, although this creates a new problem of sorts, as there's so much material available that picking the "good ones" becomes quite a task. I think it takes a "little bit of everything" to become a good programmer, you can't learn "just by doing" without all the required knowledge you'll learn from books and courses and whatnot, but if you just read on stuff and never apply the knowledge to actual software development, you likely won't become a good software developer either.  "Just coding" is very important for learning in general, but after you get the basics of programming down, you're just over the very first hurdle when it comes to professional software development (assuming you want to turn it into a "career", like the topic suggests). After you can design and write software well, the biggest obstacle in the field is understanding the customers' needs and designing the software to fulfill those, especially as quite often you're working with customers who "don't really know what they want" (from a software development perspective). Of course I'm speaking from the point of view where you work in a company that builds software to outside customers, creating "in-house" products is a bit different (done that too)...

So it takes both theory and practice, and application of learned knowledge to progress. I don't think there's a specific "order" of doing these things, more like they advance in parallel, read a bit of a book, then try to apply what you learned to an actual program. If you're just starting out, keep the programs short. It might just be something simple, like take input from commandline parameters (or a web page form, or whatever you're using), do something according to the parameters and produce some output. Once you get the basics down, you can start making bigger and bigger projects.

Personally, to learn larger concepts, I prefer books over electronic documents (try reading a 1000+ page book from a computer monitor/tablet/phone ;)), but for shorter stuff (like API/framework documentation), reading from a monitor is preferable. Btw, dual monitor setup is very good for software development, you can keep the documentation, running software or whatever on one monitor, and the development environment/debugger/whatever on the other and don't have to bounce between separate windows all the time... 

Whatever format works for you (books, ebooks, online articles, video tutorials) is probably "the best", so why not try everything to find out what works. I'd say attending a polytechnic (software engineering) or university (bachelors/masters in Computer Science) is a good way to learn, as the teachers / lecturers provide you with materials and projects to learn on according to a curriculum tailored for the field.

In my case, the "learning" happened over a long time on my own pace (I began programming as a hobby around 9 years old in 1992, I think, on a Commodore 64 & BASIC, then moved on to PC's and QBasic, Turbo Pascal, C/C++, Java...), mostly just trying and doing small programs for fun at start. In the very beginning, it was just something like printing a question, reading input the user typed on a keyboard (like "yes" or "no" to answer some question), then branch according to user input and print a different result based on the answer. Over time, the programs become more elaborate, using graphics, and in the end making games and engines with a myriad of languages and technologies (like CoolBasic, Blitz3D, PureBasic, Java, C++, OpenGL, DirectX, HLSL/GLSL etc).

Back in the early days I had no Internet or such, so to get information, it was down to books from the library and word of mouth from the few other people I knew who also programmed "for fun". We had a mathematics teacher in my elementary school (I think it was in the 8th grade), who taught programming with Turbo Pascal as an optional course, which was unheard of at that point in most elementary schools. I continued on to vocational school for information technology, but programming-wise, it was a letdown; the teachers were old electronics teachers, who knew pretty much nothing about programming, and the three year curriculum only contained a single, very simple C programming course. After that, I attended a polytechnic (formally, "University of Applied Sciences") and graduated as a Software Engineer in 2010, all the while also programming as a hobby on the side. That's about 17-18 years of "studying" both formally and informally before finally graduating, both as a hobby and in schools, but I was already working professionally by that time on the side...

For a career, formal education is definitely a plus (some companies might not even read through your resume if you don't have a degree), but just having a degree isn't everything. On the far ends of the spectrum, there are great programmers who learned on their own and never got a formal education, and poor programmers who have bachelors or masters on CS, yet still struggle with basic concepts of programming. Of course both extremes are fairly uncommon, in general, someone with a degree is likely better than someone who hasn't got one, but a degree doesn't 100% guarantee anything really. The best programmers I've ever met have been people who have both formal education and a hobbyist background.

In the end, I'd claim there are no real "short cuts", it takes time and effort to become a good software developer, and the career there is really an endless rat race to learn new technologies, frameworks, platforms, etc. as they keep changing every few years... ;) If you're just looking to making a fat paycheck, I'd claim there are probably easier careers for that. :P 

There's a multitude of "positions" in the field nowadays, and while you can try to become a "jack of all trades", likely you'll want to focus (or end up focusing) on only a few "areas/sub-fields", and usually the job title gives a hint of the focus, just to mention some: backend-, frontend- or full-stack -developers, embedded developers, software architects, sysadmins, mobile developers, database admins, devops, testing... not all of these are "pure" programming positions, but usually they contain at least some form of programming (like writing scripts for system administration, scripting continuous integration and deployment for devops or programming automated tests for testing). 

Personally I've worked professionally as a tester ("QA Engineer"), backend-developer (ranging from "typical" web-backends to realtime gaming and communicating with embedded devices over a myriad of binary protocols), technical support, sysadmin, database admin, system architect, devops and a mobile/HTML5/Unity game developer over the past 12+ years. Right now, I'm starting as an embedded developer in a few weeks, a whole new field for me professionally. So I've been more of a "jack of all trades" than just one or a few specific areas (pretty much anything except front-end, although I've dabbled there a bit, but found out that I don't like it and I suck at it in general :P), but the flipside is that while I can and have made a lot of software on those areas, I've never truly felt I'm a real expert on any of those, unlike people who have focused on a single area all the time... also, probably my definition of a so-called "expert" is very much more demanding than most people think experts as, I don't believe you can become an expert on any of these sub-fields unless you work on that single area for at least 5-10 years straight and continuously develop yourself on that particular sub-field, not to mention becoming an "expert in software in general", something that probably takes a lifetime or more ;)

Link to comment
Share on other sites

  • esaj changed the title to Career advise (programming)

Tripple kudos for such an informative and entertaining answer! All the right points covered,  and all the correct question raised. I totally agree :) Great introduction to a profession,  esaj

Link to comment
Share on other sites

2 hours ago, esaj said:

I don't believe you can become an expert on any of these sub-fields unless you work on that single area for at least 5-10 years straight and continuously develop yourself on that particular sub-field, not to mention becoming an "expert in software in general", something that probably takes a lifetime or more

+1

Always laugh when they look for a senior full stack developer.

Pretty sure that anyone that is a specialist in one and only one of the following:

- web frontend

- backend

- databases

Can ask 3 "senior" questions to your "full stack developer" on which he/she can't answer. Unless you don't have a life it's impossible to become an expert in all those fields at the same time, considering not only the complexity, but also the rate of change in those fields. Leave something on the side for 1 year and you'll realise they've upgraded 2 major version numbers and all your existing hands-on knowledge has become obsolete ... 

 

Being a professional freelance software developer for 20 years myself, I should become depressed about the amount of knowledge I had to put into my head only for it to become obsolete or useless to me a few years later (unless someone here still has use for someone who knows how to manipulate the GPU command buffer of an Xbox 360, or can use knowledge about the U and V pipe in an Intel Pentium processor?). 

The older you get the more it is about how good you are at taking on new stuff and the less it is about if you actually know where to put the ; and the , in language X or Y which you might not even use anymore 3 years from now. I did plenty of projects in my life where it was the first time I touched a given technology (stack). If you can't do that you're in the wrong business imo. It's constantly moving. I'm pretty sure there still is good money to be made in doing COBOL, but do you want to be that person?

And that is where a formal education comes into play. It's all great learning to become a javascript web-developer following some videos/tutorials etc etc, but if you don't get software engineering foundations you will just be doing ad hoc development and copy-pasting/stack overflowing stuff together (which might be fine for a lot of jobs), but you'll have a hard time transitioning into other stuff, or you will limit the technical choices to what you know, and not to what is out there (or too much towards what is out there. "OMG Facebook released framework Blablabla. We must use it in our next project!!! It's from Facebook so it must be good and it has 2 million stars on Github!!!!).

 

My 2 cents :D 

 

Link to comment
Share on other sites

 

42 minutes ago, ir_fuel said:

+1

Always laugh when they look for a senior full stack developer.

Pretty sure that anyone that is a specialist in one and only one of the following:

- web frontend

- backend

- databases

Can ask 3 "senior" questions to your "full stack developer" on which he/she can't answer. Unless you don't have a life it's impossible to become an expert in all those fields at the same time, considering not only the complexity, but also the rate of change in those fields. Leave something on the side for 1 year and you'll realise they've upgraded 2 major version numbers and all your existing hands-on knowledge has become obsolete ... 

This is very true, "real" expert senior guru full-stack devs are usually called "unicorns", because they don't exist. The whole front-end -thing seems to be just moving faster and faster every year, back when I was dabbling with it, you had a stack of jQuery and maybe a couple of other libraries as needed, now you have a cluster f**k of TypeScript/nodejs/npm/transpilers or whatever, a new framework every week and everyone has an opinion what you should be using and why whatever you're using right now sucks monkey balls. While not that old, I'm too old just trying to keep up (and really haven't) ;)

The last place I worked at had a guy who I'd describe as a "full-stack" (loosely speaking), he could do everything from front- to backend and databases, but even he admitted that his real strength is in the front-end, and he'd gladly leave backend and databases to people who know them better.

 

Quote

Being a professional freelance software developer for 20 years myself, I should become depressed about the amount of knowledge I had to put into my head only for it to become obsolete or useless to me a few years later (unless someone here still has use for someone who knows how to manipulate the GPU command buffer of an Xbox 360, or can use knowledge about the U and V pipe in an Intel Pentium processor?). 

The older you get the more it is about how good you are at taking on new stuff and the less it is about if you actually know where to put the ; and the , in language X or Y which you might not even use anymore 3 years from now. I did plenty of projects in my life where it was the first time I touched a given technology (stack). If you can't do that you're in the wrong business imo. It's constantly moving. I'm pretty sure there still is good money to be made in doing COBOL, but do you want to be that person?

This is the reason I'd suggest no-one choose software as a career if you only care about (possibly) high wage. While it may seem easy ("those guys just sit at the office all day and type on their computers for high wages!"), it's not a career where you learn everything at school and then just "do it" 9-5 until you reach retirement. You'll quickly find out the reality:

https://workplace.stackexchange.com/questions/128091/too-much-reading-studying-in-senior-engineer-job

 

Quote

And that is where a formal education comes into play. It's all great learning to become a javascript web-developer following some videos/tutorials etc etc, but if you don't get software engineering foundations you will just be doing ad hoc development and copy-pasting/stack overflowing stuff together (which might be fine for a lot of jobs), but you'll have a hard time transitioning into other stuff, or you will limit the technical choices to what you know, and not to what is out there (or too much towards what is out there. "OMG Facebook released framework Blablabla. We must use it in our next project!!! It's from Facebook so it must be good and it has 2 million stars on Github!!!!).

In all fairness, I tend to stick with what I know when possible (looking back, I've never really used anything but imperative languages on actual work stuff, for example), but I get the point. I'm certainly not vehemently opposed to learning new things (and quite often it is required really), although whether or not I put my own free time on it depends on how much I'm really personally interested in the subject. AI? Yeah, I could be interested to learn in my own time. Modern front-end technologies? Not so much, but if the employer pays for courses or can point me to good learning resources, there's enough time to learn and it's usual paid hours, sure... but don't expect me to put much effort into it outside the job. ;)

Clinging too hard on a single language or technology stack is a dead end in the long run. When Nokia killed off Symbian, a large number of senior devs entered the market, but many had hard time finding new jobs when all they knew was C++ and Symbian. Probably same goes for a number of other platforms and technologies (btw, I've made software for Blackberry, fat lot of use nowadays :D)

Also, I have had the argument about some stuff upper management wants to be used just because "Apple/Google/Facebook uses it/made it, so it must be good". Or to explain why I don't think we should start looking into block chain technology in an area where they have no application whatsoever. :D

Btw, my personal opinion about video tutorials when it comes to programming is that they should be outright banned ;)  Unless there's a really good reason that you need video (like showing something, maybe in graphics programming), it's just lazy, and I don't want to or have the time to watch your 45 minute video to get that one tidbit of information I need that's mentioned in a 10 second piece in the middle of the entire thing, where half of the time is spent watching you type the code. If you want to create a tutorial, write an article, if it needs to show something, like where some obscure option is found in the IDE, take a screenshot and put it as an image on the article   :P 

 

Link to comment
Share on other sites

2 minutes ago, esaj said:

although whether or not I put my own free time on it depends on how much I'm really personally interested in the subject. AI? Yeah, I could be interested to learn in my own time. Modern front-end technologies? Not so much, but if the employer pays for courses and it's usual paid hours, sure... but don't expect me to put much effort into it outside the job.

I always managed to invoice this to my clients.

I'm sorry, but this field is constantly moving, and unless you are stuck in a dead-end maintenance job (which no good developer should be) there will always be something you do for the first time in a given project. If everything that I had to discover on the go should be free of charge for the client, I will change careers because my pay would be cut in half I think.

I usually learn while using it, I'm not someone that spends hours following courses. They usually go waaay too slow (especially video :D ).

 

And don't get me started on web front end stacks :lol:. Talk about a waste of brain cells .... "Oh you know jquery? But now you need Angular!" "Oh you know Angular? But now you need Angular 2!". "Oh you know Angular 2? Sorry, our client is looking for a React NINJA (*puke*)". "What? React? That's so 2018! We use Vue"

FFS ....

Link to comment
Share on other sites

7 minutes ago, esaj said:

While not that old, I'm too old just trying to keep up (and really haven't) ;)

Pretty sure plenty of devs stress out on this part. Fear of not being able to keep up. I also gave up on that long ago. I hardly use anything new that comes out unless it has been used correctly by others for at least a couple of years and has matured and become stable.

I'm an iOS engineer. I only jumped on the Swift train when version 3 was there. And when I look at the shit people had to go through in v1 and 2 I am glad I did.

Ain't nobody got time for this. I have projects to deliver :D 

Link to comment
Share on other sites

On a slightly related note, I once worked on large telephone switches for private clients.  I quit to go run my paintball field.  A few years later, after selling my paintball field, I tried to get back in.  No Chance!  Everything had gone voice over IP.  Cisco was the new game in town, Lucent (At&T) was a dinosaur.  The tech train is one you can't get off if you ever want to get back on.

BUT... Before you tech giants start crying in your beer about how unfair it is, my brother says its exactly the same in the accounting field, every year the laws and rules change.  Always studying to keep up.  He's a developer now (buildings), gave accounting the elbow.

Link to comment
Share on other sites

29 minutes ago, ir_fuel said:

I always managed to invoice this to my clients.

I'm sorry, but this field is constantly moving, and unless you are stuck in a dead-end maintenance job (which no good developer should be) there will always be something you do for the first time in a given project. If everything that I had to discover on the go should be free of charge for the client, I will change careers because my pay would be cut in half I think.

Yeah, I agree and that was sort of my point ("don't get into software career if you aren't ready to constantly keep learning new stuff" to put it short), but at the same time, I tried to point out that there are lines that I draw: I've read entire books on Spring Framework and JPA for example on my own time (and paid with my own money), out of my own will, but that's been my own choice. Sure, I need to, have and will learn new stuff all the time on the job, that's given, otherwise my so-called "career" would likely be pretty brief or have ended already. But being "just" an employee, I don't get paid for or can bill those hours used on my own time on the company, so if some employer wants to turn me into a front-end dev all of the sudden, it's going to take time and money, as it's not a field I'm personally interested in. In that sense, I prefer to stick to what I know (as in, backend-development for example) ;) 

But also, "never say never"; if someone had asked me maybe 5+ years ago if I'd ever be interested in becoming an embedded developer, I would have said no. Now I've read a few books on FreeRTOS, uC/OS and ARM within a few weeks and dabble with an ST Nucleo -board and some BluePill STM32F103's I've had laying around  :P  It's not even given I ever have to work with ARM in the actual job, but seeing that they're pretty common, might very well sometime in the future. But for now, it's just for my own leisure and learning about the finer details of embedded systems in general.

 

Quote

I usually learn while using it, I'm not someone that spends hours following courses. They usually go waaay too slow (especially video :D ).

Yeah, videos are horrible, courses usually give you just a very brief introduction to subject, as they don't usually last more than a day or two, but they're better than nothing. The best ways to learn for me have usually been a book on the subject, and then applying the knowledge from the book in practice, or just the documentation for the libraries/frameworks/whatever and working with examples, so learning while using. A good article or comprehensive tutorial can carry a long way in learning new things fast, but finding a good one can be a pain.

 

Quote

And don't get me started on web front end stacks :lol:. Talk about a waste of brain cells .... "Oh you know jquery? But now you need Angular!" "Oh you know Angular? But now you need Angular 2!". "Oh you know Angular 2? Sorry, our client is looking for a React NINJA (*puke*)". "What? React? That's so 2018! We use Vue"

FFS ....

https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f   And I guess it has just gotten worse  :P 

 

 

Link to comment
Share on other sites

3 hours ago, Smoother said:

He's a developer now (buildings), gave accounting the elbow.

Same problem there.

20 years ago you just slapped some basic heating and electricity in a house and call it done.

These days you need to know about renewable energy sources, solar panels, heat exchangers etc etc etc.

Link to comment
Share on other sites

I've known just three people who could do front, middle, back end, and database. Notably one was in Mensa, while the other two were very intelligent across several fields, such as playing  musical instruments really well. Not one applied himself to programing; they came from the school of, "think hard and write answer on the board."

I thought it was interesting that all three were really good unit test programers.

These three really were unicorns.

Unfortunately nature finds a way of balancing shit out, as two of them had really ugly wives. I never met the third. Ugly as sin. 

You would expect with their skills and innate intelligence they would have young hot models chasing after them, and to some extent this was true, and yet they dated and married 2's and 3's. This is a crime, like some ghastly form of reverse eugenics.

You can judge man's worth by looking at his shoes and his wife, and these guys wore blue jeans and white Sketchers ( @Marty BackeBacke now wears elegant Allen Edmonds on all his rides).

Link to comment
Share on other sites

33 minutes ago, LanghamP said:

I've known just three people who could do front, middle, back end, and database. Notably one was in Mensa, while the other two were very intelligent across several fields, such as playing  musical instruments really well. Not one applied himself to programing; they came from the school of, "think hard and write answer on the board."

I thought it was interesting that all three were really good unit test programers.

These three really were unicorns.

Unfortunately nature finds a way of balancing shit out, as two of them had really ugly wives. I never met the third. Ugly as sin. 

You would expect with their skills and innate intelligence they would have young hot models chasing after them, and to some extent this was true, and yet they dated and married 2's and 3's. This is a crime, like some ghastly form of reverse eugenics.

You can judge man's worth by looking at his shoes and his wife, and these guys wore blue jeans and white Sketchers ( @Marty BackeBacke now wears elegant Allen Edmonds on all his rides).

Now I know why you disliked my white Nike's.

Here, just for you - me and my, wait for it, new white Sketchers :lol:

IMG_0144

 

Link to comment
Share on other sites

21 minutes ago, Marty Backe said:

Now I know why you disliked my white Nike's.

Here, just for you - me and my, wait for it, new white Sketchers :lol:

IMG_0144

 

Damn, blue jeans, Sketchers, and a software developer (?). Do you know how cliche that is?

That jacket doesn't look like a jacket. It looks like armor for the next zombie apocalypse. Spine protector and heavy elbow and shoulder armor.

-------

I've actually been wearing these as ankle protection.

Converse Men's Chuck Taylor All Star Street Knit High Top Sneaker, Almost Black/Vivid Sulfur, 11 M US https://www.amazon.com/dp/B07BT7QR7Y/ref=cm_sw_r_cp_apa_i_tNqwCbZFD6Y3Q

I believe these are true skateboard shoes, as they have a perfectly flat sole with smooth edges.

Link to comment
Share on other sites

2 hours ago, LanghamP said:

Damn, blue jeans, Sketchers, and a software developer (?). Do you know how cliche that is?

That jacket doesn't look like a jacket. It looks like armor for the next zombie apocalypse. Spine protector and heavy elbow and shoulder armor.

-------

I've actually been wearing these as ankle protection.

Converse Men's Chuck Taylor All Star Street Knit High Top Sneaker, Almost Black/Vivid Sulfur, 11 M US https://www.amazon.com/dp/B07BT7QR7Y/ref=cm_sw_r_cp_apa_i_tNqwCbZFD6Y3Q

I believe these are true skateboard shoes, as they have a perfectly flat sole with smooth edges.

:D

I could never get into the Converse style shoes.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...