A question for the (mostly?) self-taught programmers

mikeymikec

Lifer
May 19, 2011
20,033
14,393
136
I don't regard myself as a programmer, but largely through my (Windows) sysadmin type work I've picked up some bits here and there.

I learnt a tiny bit of HTML and Pascal at college (HTML self-learnt, Pascal taught). I've tried to self-learn a few languages over the years since: The ones that have 'stuck' are things like HTML/CSS, VBS/A. Other ones include ASP and C. I'm currently making progress with php (I felt that it would make more sense to make a start on php than to continue learning 'dead' ASP or start over with ASP.NET, and I prefer to be platform independent where possible).

The thing that has consistently hampered my progress, especially with C, are the lack of short and long-term goals/milestones with such a project. It's not immediately, and probably not even vaguely relevant to my business (I fix computers for a living, some private tuition, occasionally a bit of HTML/CSS coding work), but I've always like the idea of building a program that really does something useful or say fixing bugs and adding features to an open source project. I suppose it's exactly like when customers say "can you provide some tuition for me because I'd like to learn how to use computers like you do" without any real goal in mind, so I always tell them that they need to pick something specific, and it makes more sense to pick something that they'll make regular use of, otherwise they'll forget the important bits.

So, amongst those of you who have successfully taught yourself a programming language, when you started did you have a definite set of short and long-term goals in mind? Did you have to consciously make up some short-term goals in order to make it to the long-term goal (eg. come up with a project that's of no real use to you but you did it for the sake of exercising your skills)? Did you have guidance from other people at all?
 
Feb 25, 2011
16,987
1,617
126
Yup, goals are important.

Unfortunately, I am usually too "smart" to "trick myself" by "com[ing] up with a project that's of no real use." On the upside, when I was a kid I was heavily into programming "games" where you wrote code to, for instance, program a robot for gladiatorial combat. Complexity varied, but the basic concepts (routings, subroutines, stacks, interrupts, I/O) are pretty useful.

If you get into server administration instead of just desktop support and PC repair, you'll have to learn some scripting, so there's that. At that point, you could force yourself to use a "proper" programming language like Python instead of just bash or PowerShell. (It's portable! It's faster! It's extensible with modules!) Staying platform-agnostic is pretty good exercise.

If you're the inquisitive sort, you might go through the code for the modules you use and try to understand _why_ it was written that way. That's about where I am now. (Working through code samples.)

I think once you're pretty well proficient in the concepts and in a programming language, the rest falls into place and you can pick up new ones fairly quickly.

But I think you're right - without a point to it all, I'd rather sit on the porch and drink a beer.
 

Ken g6

Programming Moderator, Elite Member
Moderator
Dec 11, 1999
16,584
4,495
75
I generally find it hard to find good goals too. I can't even get myself to redo a solved problem - except simple math problems - in a new language to learn it. If you're looking for simple math problems, this is a good site: https://projecteuler.net/

I do find it helps when you can find something with visible source code, and you can tweak something you don't like. Although I had a little JavaScript experience earlier, I basically learned JavaScript and CSS by tweaking sites with Greasemonkey and Stylish respectively.

I also find that if I get a little experience with something, but don't pick it up immediately, if I come back to it a few months later it gets easier. That might be because I have a good reason to come back to it at that point; but the early experience also helps.
 

bzb_Elder

Member
May 25, 2011
86
13
71
I created my first Hello World program with VB5 while I was a Desktop Support technician. About a year later I transitioned into a Sys Admin role, and at that time I called myself "a programmer trapped in a Sys Admin position". From there, it's been OTJ training and self-learning.

For me, programming quickly became a passion. I didn't care if I was making money or not, I just loved writing code and making something from nothing. For probably half of the last 15 years, I've consistently had a side project I was working on (in addition to helping raise three kids). Many of them were my own ideas, and some were partnerships with other dreamers. I can't say I've made much money (yet) from all my side work, but I have become a competent programmer in several languages.

You mention heading in the .php direction - pick one of your favorite web sites and try to recreate its functionality using .php. Is it a lot of work? Absolutely. Is it worth it? If you're passionate about programming, it definitely is.

As far as advice, Google can be very helpful when learning a new language, but be careful to take your time and understand what you're doing. I've seen many examples over the years of 'programmers' who copy/paste code from the internet to make something work, and then really get into trouble when what they've frankensteined together breaks, and they can't fix it.
 

Childs

Lifer
Jul 9, 2000
11,313
7
81
I have a similar problem...I've learned some languages a couple times, but because I dont have anything to do with it I forget it after awhile.
 

K7SN

Senior member
Jun 21, 2015
353
0
0
I generally find it hard to find good goals too. I can't even get myself to redo a solved problem - except simple math problems - in a new language to learn it. If you're looking for simple math problems, this is a good site: https://projecteuler.net/ ....


Thanks for that link, I may be bored in a few weeks, depends on funding. This will keep me from getting bored. I looked at the list and didn't see anything that was too difficult to solve in a couple hours, perfect in a day.

I'm a scientific programmer so any useful mathematical formula is fun to me. Seeking solutions, even partial, to unsolved mathematical problems would be fun but I'm talking weeks, not years.

The OP should probably stay with script languages; I'm sure he could find "...something useful or say fixing bugs and adding features to an open source project." I know lot's of mathematical open source projects but not sure what is available in his line of work.
 

Homerboy

Lifer
Mar 1, 2000
30,890
5,001
126
Every language I have "learned" (and I use that term very loosely) was based off the need to complete a project -- either for work or for personal.

A simple example is back in the day (1999ish) I wanted to create a stats driven website for a Madden and NBA Live league my friends and I played. So I learned some simple database stuff, some jsp some html and went from there. So I had "goals" I guess in that scenerio
 

purbeast0

No Lifer
Sep 13, 2001
53,487
6,331
126
even as someone who went to school for it and is doing it professionally, when i want to learn stuff on my own time, i have a hard time doing so unless i have SOMETHING that i have in mind that i want to create. and i can't just do something like create a calculator. it has to be something that i actually think i will use or can put on the app store.

that's how i have learned a lot of mobile development in my spare time though because i had an end goal in mind. i have also started learning some mobile technology that ended up going nowhere once i started playing around with it because i realized how limiting it was, but i initially had a goal i was trying to get to, but ended up not being possible due to limitations.
 

brianmanahan

Lifer
Sep 2, 2006
24,561
5,974
136
i used to learn languages/libraries and work on side projects for fun

but nowadays i only do it if there's gonna be a payout
 

njdevilsfan87

Platinum Member
Apr 19, 2007
2,341
264
126
I used to build websites for fun on/off when I was 14-20. Learning PHP and building database driven websites helped me get used to "logic based" coding (something that HTML and CSS isn't). Then came C/C++, which was my first exposure to low level coding. From there I learned CUDA computing and parallel programming in general, which just added another dimension of complexity to the logic involved. And once I learned that, I became high demand for my field of work. I actually got my PhD in engineering a good 6 months in advance because I became pretty good at writing codes to run on GPUs, and was really able to crank out lots of numbers in a short period of time. My next step is going to be exploring heterogeneous computing. And to add, Python is my MATLAB replacement, as well as front end user friendless option. In the field of engineering, these are the languages that go a very long way, imo (C++ and Python, that is).

but nowadays i only do it if there's gonna be a payout

Same. But luckily, exploring new ideas is part of my job. :)
 
Last edited:

Red Squirrel

No Lifer
May 24, 2003
69,828
13,404
126
www.anyf.ca
I normally have goals, like I want to make a program for my own use, or to release or what not.

For example I wanted a monitoring program for my servers, as well as physical sensors such as temperature, battery voltage etc. I could not find a program that met my needs, some were either too complicated to setup due to having lot of dependencies and other configuration requirements, while others lacked options that I wanted. For example I had tried Zenoss and Nagios but they were just too complex to deploy for my taste, I did not want to have to comb through huge docs and spend hours trying to get these things to work, and have to repeat for every single server. Then I tried Pandora, but it lacked a lot of features like ability to have low/high min/major/critical alarm points on a single monitor.... so long story short I made my own. It's still in beta, I should probably look at polishing it and releasing it actually. I do plan to expand it quite a bit though as I want to add control features as well for home automation.

I find the biggest challenge though is finding online tutorials that offer enough details on how to do certain things, like when you want to say, create PNGs, or use sound, or do anything more advanced than standard I/O stuff. Searching for info on programming is like pulling teeth sometimes. What I tend to do is make myself wrapper classes so that once I do figure out how to do something I don't have to do it again next time. I have a bad habit of speeding through those with intention of adding more features, then never ending up going back though. :p I made a PNG class, but it can ONLY load RGBA PNGs right now. I need to comb through some tutorials to find out the different formats and how to read them so I can incorporate that into my class too.
 

sm625

Diamond Member
May 6, 2011
8,172
137
106
My experience has been built primarily on a "it would be cool if" sort of philosophy. When I say to myself "it would be cool if" I then try to search for the particular pieces of code that might help me accomplish that.

My first real programming project was an automated online chess program that scanned the pixels on the screen and reconstructed the piece positions and fed it into a chess engine and took the result and sent it to a digital I/O board which was hacked into an old wired mouse. My program literally moved and clicked the mouse cursor using hardware, making it undectable back in the day when I thought such things could be detected. This was in 1999. It was my way of striking back at people who were clearly cheating. You want to cheat? Oh then I can cheat faster. My program was very fast. It crushed every opponent at speed chess. I added many features, like being able to detect the size and position of the chess board. I made the hardware mouse routines optional.

Anyway, my large programming projects have always been driven by the desire to accomplish some sort of task that coincides with a personal interest. I've written helper software for a few games, and written some trading software all following this philosophy. Most of the time I dont even know what the code does or how it works at the start. It is only when I go to modify it to suit my purposes that I learn all the intricate details. After doing this for a long time you realize that you actually know a lot more than you realize.
 

adamantine.me

Member
Oct 30, 2015
152
4
36
www.adamantine.me
Yup, goals are important.

Unfortunately, I am usually too "smart" to "trick myself" by "com[ing] up with a project that's of no real use." On the upside, when I was a kid I was heavily into programming "games" where you wrote code to, for instance, program a robot for gladiatorial combat. Complexity varied, but the basic concepts (routings, subroutines, stacks, interrupts, I/O) are pretty useful.

If you get into server administration instead of just desktop support and PC repair, you'll have to learn some scripting, so there's that. At that point, you could force yourself to use a "proper" programming language like Python instead of just bash or PowerShell. (It's portable! It's faster! It's extensible with modules!) Staying platform-agnostic is pretty good exercise.

If you're the inquisitive sort, you might go through the code for the modules you use and try to understand _why_ it was written that way. That's about where I am now. (Working through code samples.)

I think once you're pretty well proficient in the concepts and in a programming language, the rest falls into place and you can pick up new ones fairly quickly.

But I think you're right - without a point to it all, I'd rather sit on the porch and drink a beer.

I'm actually learning more about Bash after having written some directory/filename/organization program in Python, and appreciating how easily the same thing can be done with minor scripting.

Either way, to successfully teach oneself there needs to be the need. There are online courses (Coursera, codecademy), beginner communities /r/learnpython, and small exercises on sites like codingbat. These should help keep you focused and busy while you overcome the initial learning curve.

Ask yourself what you want to accomplish, why it is you want to program, then sketch out a plan or make some small goals.

sm625, or anyone else, do you think copy/pasting or putting together some "Frankenstein code" is prohibitive for personal growth and learning? I find myself doing it sometimes, but coding something from the ground up every time can be time consuming.
 
Last edited:

bzb_Elder

Member
May 25, 2011
86
13
71
do you think copy/pasting or putting together some "Frankenstein code" is prohibitive for personal growth and learning?

Although my first post may have seemed to indicate as much, I don't believe putting together disparate pieces of code to achieve a goal is prohibitive at all. As a developer with roughly 15 years of experience, I still to this day search for (and use) examples of ways to do new, unfamiliar things.

These days, nearly anyone with half a brain can assemble code snippets to do just about anything, without the slightest understanding of how or why the code does what it does. My previous frankenstein comment was directed at "developers" who copy/paste examples without even attempting to understand what the code is doing. As a "developer", I believe there should be a desire to understand the how and why.

So if you learn better from doing than studying, like I do, then piecing together and tweaking is probably one of the best possible ways to learn and grow.
 

purbeast0

No Lifer
Sep 13, 2001
53,487
6,331
126
Although my first post may have seemed to indicate as much, I don't believe putting together disparate pieces of code to achieve a goal is prohibitive at all. As a developer with roughly 15 years of experience, I still to this day search for (and use) examples of ways to do new, unfamiliar things.

These days, nearly anyone with half a brain can assemble code snippets to do just about anything, without the slightest understanding of how or why the code does what it does. My previous frankenstein comment was directed at "developers" who copy/paste examples without even attempting to understand what the code is doing. As a "developer", I believe there should be a desire to understand the how and why.

So if you learn better from doing than studying, like I do, then piecing together and tweaking is probably one of the best possible ways to learn and grow.

i agree with this. i use google + stackoverflow A LOT for code snippets.

the thing is, i understand what is going on when i do that though. i don't just blindly copy/paste code and hope things magically work. a lot of the time i will have to make minor changes too just to fit my exact situation.

but i've definitely learned A LOT via this method, especially when learning new languages.

hell right now i'm working on a serious iOS app and i'm using swift for the very first time. i'm also using storyboards for the first time. i'm using google A LOT figure out things.
 

bzb_Elder

Member
May 25, 2011
86
13
71
i don't just blindly copy/paste code and hope things magically work
This is exactly what I meant in my initial post. Well said!

As long as you don't mind, I'm using this quote in my signature.
 
Last edited:

nrobidoux

Member
Nov 2, 2015
28
0
0
So, amongst those of you who have successfully taught yourself a programming language, when you started did you have a definite set of short and long-term goals in mind? Did you have to consciously make up some short-term goals in order to make it to the long-term goal (eg. come up with a project that's of no real use to you but you did it for the sake of exercising your skills)? Did you have guidance from other people at all?

I don't think I did. It was 1990 I scraped together a few hundred dollars for Borland C++ 3.0 and my father found a tutorial and put it on a floppy. I was in heaven. I was learning to program!!!!

Well after the tutorial's lessons I quickly learned that I knew the rules for the language but not the language. I had no "vocabulary" (knowing what all the functions did) but I knew how to "put a sentence together." I really had no problem to solve, even if I did wasn't sure I could put together the logic to solve it...

So not much happened.

Then forward a decade... or two, and had a rough idea of what I wanted to accomplish. That's when I began to learn specific languages for certain tasks:

  • PHP: Web developement and string manipulation / regex, etc.
  • x86: I'm a geek!!! I like to micro-optimize algorithms I find interesting for fun. Not really productive, just fun.
  • Java: Android. The dream of writing an app that will surplant "Clash of Clans," "Castle Clash," etc.
  • erlang: The backend

So.... I write a lot as you can see, am a bit scattered, :) Yes, currently I must have a goal. "Goal" isn't the right word... at least for me. I must have a problem to solve. If you have the spare time I would encourage finding little fun projects to do just to learn or keep skills up if that is your style. Ultimately there must be a reason to learn. That's my feeling anyway.

My style, is I learn as I go... with Google and StackOverflow a few keystrokes away and a pen and paper to draw, organize ideas, and see how different pieces will be interacting. I isolate a piece of the bigger project and work on that.

I've never sought guidance from anyone. But it can be helpful to do so. Always good to develop good programming practices and styles, learn to manage a larger project, etc.... easier to leverage others' knowledge than do everything oneself. :)