Is it possible to learn programming without going to a university or having a teacher?
In my opinion it is, and it's what I'm doing now.
I'm reading books, I learn because I enjoy it and there's no teacher/university pressuring me or making me learn what I don't want to learn, there are no deadlines or shit like that.
I am not interested in a job either.
So, what do you think? IMO that's the proper way to learn programming.
I'd go as far as saying it's the proper way to learn anything, but I wouldn't know that..
So what do you think? Why more people don't learn on their own?
I think it's the lack of interest & motivation.
discuss.
sure. i've learned a lot of stuff by myself.
> IMO that's the proper way to learn programming.
Me too.
In the past ten months I've finished several textbooks, a few dozen papers, and far too many online articles. I'm enjoying every moment of it; in fact I'm somewhat annoyed I'm not reading faster and doing more because there is so much to cover.
If you take undergrad seriously, you'll have a wide range of general knowledge on your vocation crammed into you in a short time. But that's just the beginning of a very long road.
The problem with university is scale: current pedagogy supports more students but provides little support for intrinsic motivation. The problem without university is... probably TV, by a wide margin.
I honestly advise self-learning without at least supplementing it with review from someone who knows their shit. It's very easy to fall into a trap of believing you understand something when you don't, or not fully.
>>4
I think you meant to have a 'not' in there somewhere.
I've learned a lot on my own -- networking setups, server administration, all that stuff. The only thing I really got out of uni was how to structure code and use good data models instead of being all haphazard about it. I don't mean to downplay that; it's really important and all, but I have learned a hell of a lot more on my own than I ever could in a classroom.
>>4
Again, I don't need a person.
I have my technical manuals, my credible books & standards..
But yes, I know what you mean. It happened to me once and I don't do that mistake again.
Horrible confusion, I honestly believe I'm lucky I got past that.
> Again, I don't need a person.
While technical manuals and standards are great, I believe there is a lot to be learned by having access to someone who has applied those standards and whatnot in the real world. I think something >>4 was hinting at is that no matter how many books you have, they aren't going to cover everything, and having someone with real experience looking over your shoulder is going to benefit you greatly by being able to teach you things no tech manual can.
A mentor doesn't have to provide structured learning exercises; a mentor isn't usually the same as a university professor. Most university courses are something more like paint-by-numbers for programmers.
A real artisan will help you appreciate other people's craft. Sometimes it looks like they're writing poetry, or tending bonsai.
If you know a better programer, try to learn from them as much as possible. If you don't know anyone better than you, you're still close enough to the bottom that university can help.
As far as just learning it, yes it is possible and most of us learned it that way even though we went to college and had teachers that were supposed to teach us.
But, if you want a job, college is a must. They won't take you seriously otherwise. If it wasn't like that, programmers would probably be the largest intellectual community without college education :)
>>9 Fresh out of college programmers are idiots, and everyone knows it. If you're competing for that job, you're no programmer.
>>10
Didn't say it's all about it. I said it's a prerequisite. And I would be a bit more careful before calling people idiots. Of course there are those who don't actually know anything about real world programming, but not all newbies are the same. Don't discourage new programmers.
>>11 And I disagree. It's not a prerequisite. The materials you'll find in any CS course are secondary to the materials you'll find in mathematics courses, painting, or even music.
The curriculum is so awful in CS that I really do think it's a waste. There are some interesting challenges in some schools' 400-level courses, but you have to seek them out. They're considered "hard", and people in CS tend to avoid them because they're so unlike anything they've done before.
If this discourages "new programmers", that's too bad. I simply don't know any way to encourage them to learn how to engineer and reason and program without a computer and their favorite language without rejecting the usefulness of their CS education.
> But, if you want a job, college is a must.
If you want a job, a blog, an open-source projet, and many friends are a must.
really it all depends on what kind of learner you are if you can digest a whole book of crap go right ahead, no college is needed a lot of the time as long as you have a lot of previous work on your resume which is easy to get, there are tons of online sites that allow you to get paid for making one program for one individual at a time completely over the internet, you can make these jobs look like your really experienced if you put them the right way on a resume.
All my programming knowledge is self-taught. I'm reading SICP right now, section on Tree Recursion. Unfortunately, I wish I had the math background suitable for programming. Whenever I come across mathy stuff about sets or they bring out crazy seemingly random notation it all goes over my head and makes me feel pretty stupid.
Moral: take math at school/college. Discrete math is apparently the math for programming.
Personally I am having difficulty finding a course online which doesn't have any subtle prerequisites. Like I got a book on set theory called Sets and Groups and I get the first chapter and it's all good, then it's like "now prove x" and brings out all this complex proof nonsense that I have no experience in whatsoever. It's like anything I try to do with maths, there's always a prerequisite and it just makes me think "sod it" and makes me lose interest.
What I really need is a mathsy friend who can judge simply by a conversation what I need to read and say "read this" and I'll do it.
</random rant>
Blah.
>>16
Or just don't read SICP, because it's really heavy on the math-side of things. You can learn programming other ways besides trudging through complex mathematical stuff.
Try just playing around with code. Write little programs that do something relatively simple: a directory listing, web page downloader, or a two-player game of checkers, for a few examples. Figure out how existing programs work, and build from there.
>>18 Maybe I should clarify with "as an introductory text". Once you "get it" SICP won't be as difficult, but it really isn't a good place to start.
>>16
http://highered.mcgraw-hill.com/sites/0072880082/information_center_view0/table_of_contents.html
That should cover everything you need to know.
OCW. Hurray.
Honestly, I don't really benefit from a lecture over a reading in CS like I do in say, history. But having an actual class and deadlines provides good motivation for lazy people like me. If you don't need that, I envy you.
Every fucking coding assignment you get from any school will be horrible.
For example, learning about arrays. Teachers wants us to make a calendar app. Input the number of a month and it will display the a calendar for the month for he current year. That's it. Simple shit.
Would you use an array to do this. If you answered yes, then you are just as stupid as any CS teacher.
So I write a program that uses the algorithm to find the day of the week for any given date. With that I get the first day of the week for the inputted month and then get output the calendar.
It was simple, met and exceeded all areas of the assignment and it was a fail. Because I didn't use an array. I explained to the teacher that "use an array" wasn't in the requirements. He didn't care because he was an idiot.
They all are.
>>22
If you're learning about arrays, it seems implicit to me that you ought to be using an array in the assignment. It's nice that you can solve the problem in other ways, but you're missing the point.
I agree that it sucks how procedural CS classes can be, but they're still helpful. To become a good programmer, though, one has to be self-motivated, in addition to making use of educational resources.
The real point is that in learning some construct (such as arrays) you are forced to approach the problem incorrectly and implement a solution that is not appropriate.
Most classes teach you about programming. They are terrible about teaching you how to program. You need to be learning both at the same time.
> They all are.
Hey now... D:
>>25
It was you that approached the problem incorrectly. Your program is a very shitty hack, at best. Stop being lazy jackass.
>>27
Sick burn.
ORLY?
So you would do something like the idiot prof wanted. Maybe create an array of 12 items, one for each month with he value being the # of days in that month.
The use a magic number to specify what day of the week January 1st is for the current year. Then loop through the array starting at 0 (January) and add up all the number of days up to the month before the selected month. Then add 1. Then figre out what day that is based on what day January 1st was.
Then create an array of 42 elements. Starting at the first day of the week element in the array, loop through filling each item with a number that is 1 larger than the one before it.
Then loop through the array and print out your calendar.
Or an alerternative would be to create another month array and fill it with a number representing the day of the week that the first of that month falls on. This way you get the joy of manually looking this up on a real calendar (because it makes total sense to use another calendar to make a calendar).
If you can't see why this approach is completly wrong, then you are not a real programmer.
>>29
YHBT.
BAAAAAAAAAWWWWWWWWW
One major point in programming is doing it to spec - how the customer wants in the end, regardless of what you feel is better.
In a class, the customer is the prof. do it as they say, prove you can do what's needed without trying to prove your H4Xx0R!!1! skills.
Yes you know a better way of doing it. Though that would only be a point if anyone gave a shit. Clever boy, you're failing your class.
You missed the point. It was never required in the spec to use arrays. The basic business rules as they were:
That was it. There was no design specification. And in this case, the customer should have known better.
You are also missing the point. You should give a shit that many programming instructors teach concepts by forcing you to approach problems wrong.
>>29
That approach is just as gay if not gayer. Are you in junior-high or highschool?
(are you a girl?)
> (are you a girl?)
How would that affect anything?
Your lack of reading comprehnesion is showing. What I described is what the professor wanted us to do. I contend that it is incorrect.
To output a simple calendar for a month you only need to know 2 things. What day of the week to start with (the first of that month). And how many days the months has (if 4 or 6 or 9 or 11 then 30 else if 2 and also leap year 29 else 2 28).
That is 2 simple algorithms (1st day of month and leap year). There is no need for an array.
The only purpose the array served is to give you the 1st day of the week offset by counting the number of 0 or null values from the first array element. That isn't an appropriate use of an array.
Or less stupid, but still stupid is to make an array of 12 elements, filling each with the number of days for that month. Which is stupid because that information will never fucking change except for Febrary, and getting the number of days for Febrary given a year is trivial.
I am being led to believe 2 things, some of you have had a similar assignment and completed it in a fasion similar to this thinking that approach was not stupid. And/Or you seriously don't understand why the professors approach is fucking terrible.
And while this was an acedemic exersice, and was an exescise in the real world that even fewer of you would use a decent date library and not have to code any of the algorithms yourself because someone has already done the fucking work for you.
I don't see how the discussion here is any better than 4chans /prog/
In reality, using a constant array to output that information is a bit more efficient than what you did.
But anyway, you shouldn't be making sweeping generalizations about high school computer science courses. Yeah, some suck - mine sucked - but there are high school teachers out there who know what they're doing, even if they may be a rarity.
> Which is stupid because that information will never fucking change except for Febrary
Your program will fail for September 1752, and presumably all months prior.
>>36
learn to spell you stupid motherFUCKER. trust me nigger, you are so not a good programmer. seriously, stop talking like you know shit.
That is incredibly irrelevant as the current year will never be 1752.
You expect someone to "stop talking like they know shit" and say he is "not a good programmer" without anything to actually demonstrate that you know anything or what he is saying is completely wrong and bad programming.
Seriously, you are the one who needs to shut the fuck up.
It is not possible to learn without education.
>>40
Always design for extensibility. Otherwise you will eventually bury yourself in a tangled source tree full of horrible hacks because you didn't think ahead.
Doesn't understand the Gregorian calendar. While you are correct in the grand scheme of thing, >>38 found the lower limit of the Gregorian calendar and >>40 pointed out that since the original spec was "current year", the lower limit didn't apply.
You are trying to too hard to be too smart that it makes you look too stupid.
>>44
Did you really say design for extensibility for this little program of the Gregorian calendar? Seriously, are you retarded or something?
>>45
Learn shitty programming practices, and you will become a shitty programmer.
I was drunk as shit when I wrote that. Just ignore the "Doesn't understand the Gregorian calendar." part. The rest is accurate.
> Always design for extensibility. Otherwise you will eventually bury yourself in a tangled source tree full of horrible hacks because you didn't think ahead.
Actually, no. Don't do this. It's a far too common problem of programmers to over-generalize and over-abstract. Don't design in any more extensibility than you will need. It is a waste of time and effort, and you will instead get buried in a abstractions that you do not actually need and that only bloet your code and make it harder to follow.
>>48
Just like everything else in life, stable results depend upon good balance. Also, code should be easy to follow if ALL the related documentation is correct and you have a good debugging system. System models like flow charts and UML models aren't just good ideas, they should be a mandatory part of good programming.
>>49
For fucks sake, this is a tiny little calendar. You don't need fucking flowcharts or fucking UML whatever the fuck that is to write this fucking program, you fucking idiot.
>>51
Ofcourse I know how to write a shitty calendar and I don't need fucking modeling shite to either. And I don't need you telling me what I do thanks you fucknut.
Calendars: Serious business.
The way you're talking, it sounds as if you have very little respect for your prof. If that is the case, it probably has shown through in your attitude and work on several occasions, and he's probably noticed it. Did you write your program without using arrays for the sake of "good programming" practices, or because you wanted to spit in his face?
Yes, I agree, the problem that he gave you is an inappropriate example of array usage, but you could have addressed that by asking him outside of class if you could implement the program in a different way. (To which he would probably respond "I see what you're saying but for the sake of 'instruction' I would prefer you do implement the program using arrays"). I've run into many such "practice problems" in my introductory programming class days, and I can safely say that a little maturity goes a long way. Thats not to say that coming up with "better" ways to solve problems is a bad thing, but lets try to be civil about it.
As for customers making requests that you don't agree with, rarely are customers "tech" people, so rarely are they going to "know better". Sometimes you're going to run into customers singing the praises of some pet technology or implementation they've read about in a magazine, and completely ignoring them for the sake of feeding your own arrogance is a good way to lose your job.
tl;dr: Stop being immature and complete your assignments. If you REALLY don't like your teacher switch classes or schools.