[ 3 / biz / cgl / ck / diy / fa / ic / jp / lit / sci / vr / vt ] [ index / top / reports ] [ become a patron ] [ status ]
2023-11: Warosu is now out of extended maintenance.

/sci/ - Science & Math


View post   

File: 93 KB, 380x247, delayclose.jpg [View same] [iqdb] [saucenao] [google]
6783911 No.6783911 [Reply] [Original]

Autodidactic learner here.

I'm attempting to teach myself computer programming, but I find that in many of the books and freely-available tutorials, I run across the same stumbling block:

I'll see or hear a term I'm unfamiliar with
I'll look up the definition
It's defined with more terms I'm unfamiliar with
So I look up those terms
They are also defined with terms I can't understand

My question is thus: am I going about this the wrong way? Can anybody who has taught themselves programming tell me how they learned? Was there a specific book or video that really helped it click? Moreover, I wonder if I'm not just going about this the wrong way altogether, and if I am, any guidance in the right direction would be most appreciated.

>> No.6783929

If you're wondering, I did read the sticky on the front page, and I did look up the CS guide on the wiki. Needless to say, it didn't help. "You learn programming by programming," is roundabout logic, and severely undermines the need for understanding the material prior to implementation.

>> No.6783997

>>6783911
look for a beginner's textbook of some sort for whatever language you're interested in. don't go in over you're head. a text book will maintain a steady pace and only tell you what you need to know.

>> No.6784001
File: 305 KB, 640x974, 1409857594051.png [View same] [iqdb] [saucenao] [google]
6784001

the book is available freely online

>> No.6784009

>>6783911
Projects,
>Write shit code
>Keep writing till you get to a problem
>post code online
>people tell you you're a shit programmer and tell you everything you're doing wrong
>learn from their criticism
>???
>profit

Also fuck web shit

>> No.6784010

>>6783911
You don't know where to start and you don't know where to go. Don't listen to "you learn programming by programming", it's obvious, useless advice.

Do this:
1) Learn a super high level language where you learn to understand the basic ideas in programming, algorithms, data structures, and some oop and functional if possible at best.

My reccommendation: Python is excellent for beginners, and has features from procedural, oop and functional paradigms, at least in the basics. So go ahead and learn python! This course is amazing: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00sc-introduction-to-computer-science-and-programming-spring-2011/

You don't need a book at this step, because you're focusing on learning concepts and not rigurosity or language theory.

2) After you got that down, go and learn a low level language to understand language theory.

My recommendation: Learn C. C is highly regarded because it will teach you memory management and get you acquainted with low level stuff, as well as make you able to program without the magic in high level languages.

References: The C Programming Language is old, some people say it's no longer the best, but IMO it IS the best reference for the C language. Clear, concise, to the point. Read it, learn the language well, and test your ability with problems from an online judge like UVA or such.

(Optional: You can learn an assembler language at this point, to get into the really fine low-level details. I don't know about giving you references for this, as I learned from some classes in my school and my references are presentations and datasheets.)

3) Go and learn the different paradigms, investigate! Once you really know C well, you should go ahead and go into OOP, logic and functional programming. In my case it was C++, smalltalk, Prolog and Haskell, and I learned a lot from learning all of them at a basic level. Later on I learned much more C++ and it's now my language of choice.

>> No.6784016

>>6784010
>>6784001
Structure and Interpretation of Computer Porgrams gets a LOT of praise. I never got around to reading it. I feel like I'm missing out. Go ahead and look it up after you learn python if that's your thing.

>> No.6784021

>>6784010
>C
>without the magic in high level languages.
C is still pretty high level man, and the standard library is just as guilty of magic abstraction as some other languages are.

>> No.6784028

>>6783911
Try C.
http://www.cs.cf.ac.uk/Dave/C/node4.html#SECTION00400000000000000000

And a quick compiler setup:
Get TinyCC from bellard.org/tcc
And then compile stuff with `tcc file.c`

>> No.6784040

>>6784021
Uh. You can't possibly compare C with python in abstraction. Which is the whole point. C is the lowest you NEED to get. Assembler is great to do, but eh.

>> No.6784062

Thanks. This all seemed like very sound advice.

Since I've only been doing this intermittently for a month, I can't have unrealistic expectations for myself. But now I feel like I have an actual goal to be working toward, and not just desultory information culled from random Internet-dwellers.

You guys are excellent.

>> No.6784072

>>6783997

That's where I seem to have the biggest problem though. I need to understand something before I rush headlong into it. I'm not one who can just be told, "here is a constructor. Here is what it looks like." I have to know why I should use it, and under what circumstances I should use something else.

>> No.6784077

>>6784072
I don't think a book is the best right now. Go for the MIT course on python I mentioned.

>> No.6784081

>>6784072
Did you learn set theory before arithmetic?
Did you learn multiplication then go what about changing values?
Did you learn the meaning of the word dog and immediately classify it as a noun?

Don't be silly you can always go to fundamentals and special cases but don't you think you need a general idea first?

>> No.6784084

>>6784001
Not a book for a begginer who is studying by himself.

>> No.6784087

>>6784077

I've heard Python called the best language for a beginner. And from the cursory amount of research I've done about it, I would agree. But isn't it supposed to be an advanced language?

I was hoping to start with C++ and work my way up from there. Is that wrong?

I can think of no other field of study in which one is advised to start with the advanced, then progress to the basics.

>> No.6784092

>>6784087
Oh my god yes you're terribly wrong dude.
Python is a "high level language" which means everything is abstracted to make it easy for the programmer. There's a lot of things you can use that simplify your life so much and give you a lot of power.

C++ is a mess. It's an armed bazooka that lets you blow your head off in a second if you don't know exactly what you're doing. For the love of god, stay away from C++ until you learned C well, and you shouldn't go into C until you do something high level like python

>> No.6784093

>>6784081

I was a dismal student. I only have a high school diploma because I thought I might as well get one.

>> No.6784103

>>6784092

So, Python for the fundamentals of computer programming, C for the intermediate skills, THEN C++. Got it.

And at what proficiency level would you recommend moving from one language to another? Or is that something intuitive, like I'll know it when I get there?

>> No.6784105

>>6784092
I'll elaborate a bit. Natural progression is good! If you do something like Assembler into C into C++ into C# into python, you'll understand everything along the way and it's gonna be really cool!

The problem is that you don't want to start with something as low as assembler, because you can't do anything with it and you don't know what the things you're doing are for. So you start with something REALLY high leveled (so much it's really slow and inefficient for the computer but great for you) to get the basics down before you go into the low to high progression. This is especially true because once you know C, and especially once you know C++, python and C# are piss easy and there's no point or difficulty in learning them. And since you have more powerful tools at your disposal, you probably won't want to use them anyway.

>> No.6784107

>>6784103
What you want to be doing in Python is learning about computer science in general, the course I linked is great for that. It's not focused on the Python syntax - there's a short tutorial for that because it's a simple language - but in getting the concepts across.

You don't need much proficiency with anything to start out with C, but it's good if you have the ideas clear. I'd say once you're done with that class, if you feel like it go ahead with C already.

>> No.6784108

I should also mention, in return for your generosity, I would be happy to recommend any material regarding the following subjects in which I'd consider myself well-versed:

Film theory
Audio engineering
Music theory
Anatomy and physiology
Psychology

>> No.6784111

>>6784108
Man. I used to be a music enthusiast until college took my life away. Good music theory book?

>> No.6784114

>>6784108
Audio engineering, only cause it sounds interesting.

>> No.6784122

>>6784111

William Duckworth's Creative Approach to Music Fundamentals
Robert Ottman's Rudiments of Music
Ward Cannel's How to Play the Piano Despite Years of Lessons

All three are written in plain English, without sacrificing knowledge for readability. The first even comes with a CD to help ear-training.

>> No.6784130

>>6784114

F. Alton Everest's Critical Listening Skills for Audio Professionals
John Eargle's Audio Engineering for Sound Reinforcement

With the second one, you're gonna wanna skip through a lot of the first few chapters, since they deal with sound on the atomic level, then the physics of sound. It's interesting, but written for someone with a working knowledge of the material. The rest of the book is a breeze.

>> No.6784139

>>6784122
You got anything more rigorous? I've been playing piano and guitar for years but I still don't know much theory

>> No.6784150

>>6784139

More advanced theory? Mark Levine's Jazz Theory Book.
For guitar, The Guitar Grimoire Series. Those are really the best, because it's all killer, no filler. No preamble, no forward, no paragraphs of background and history. Just scales, modes, progressions, pentatonics, and exercises. Until I read these, I didn't even know there was such a thing as a Kumoi Pentatonic, much less how to use it.

>> No.6784152

>>6784150
great, i'll skim the other ones and read anything i've missed, and then work through this, good luck bro

>> No.6784156

>>6784152

You as well. Those augmented substitutions can be a bitch and a half.

>> No.6784169

>>6783911
>Special-needs leaner here.

>> No.6784182

Simply work through the material knowing that the dots start to connect in the future.

As a mathematician, I can say I would have gotten anywhere in advanced math if I hadn't taken that approach with Real Analysis.

I also used to believe there was an actual structure to knowledge (outside mathematics). I could expand on this (I studied ontologies, information science, knowledge management, classification... all for a project that was phrased wrong since the beginning), but TL;DR: there's not a rigid body of knowledge... more like connections between things.

>> No.6784185

>>6784169
you're a jerk and not a gentleman and not a scholar

>> No.6784772

>>6784185
You might as well use !(gentleman || scholar), rather than !gentleman && !scholar.

>> No.6784779

>>6783911
I think you need a B.A degree to get hired. Don't even put up a logical argument that you're are as qualified as someone with a B.A degree despite being competent at programming. Chances are they won't hiring you anyways.

>> No.6784789

>>6784108
Recommendations on film theory?

>> No.6784816

>>6783911
>Autodidactic learner here.
Same man. Passing all my online classes with ease. I fuckin hate the two campus classes I have.

>> No.6784828

the best way to learn programming is to give yourself a project and figure out how to do it, not by reading textbooks

>> No.6784987

>>6784092
My CS classes started with C++ (so it's all I know) and I'm in my third semester now (the second was fairly similar to the first)

when does it become a bazooka?

>> No.6785549

>>6784779

That's fine. I don't want a job as a programmer. I just want to learn programming.

>>6784789

Vsevolod Pudovkin's Film Technique (consequently, the book Stanley Kubrick learned from)
Sydney Lumet's Making Movies
David Mamet's Bambi vs. Godzilla

Apart from that, watch a lot of movies. The more, the better. You'll hear directors talk about esoteric things like "vision" and "intuition," and though some of that is purposeful obfuscation to keep interlopers out of their trade, they're right in that some things work and some things don't. And only by watching a lot of movies can you tell what makes them work.

Then go back and watch them again with the commentary track. One director's commentary is worth more than a semester at film school. I promise you that.

>> No.6785555

>>6784828

See, that doesn't jive with me. How would I know the way to start a project without knowing programming? That doesn't make sense.

I can't just say, "I want to make a program that gives me a blowjob," and then program it. How would I know where to start? And even if I research the answer, how would I understand the results?

>> No.6785561

>>6784987
The errors aren't clear at all, templating is hard as hell to understand and use for beginners, memory management in general is manual, there are too many places to shoot yourself in the foot and you're supposed to know what you're doing when using it.

How did they teach it to you? How did they avoid these pitfalls?

>>6784828
dumb

>> No.6785594

Ha! Finally my chance!
What's your secret in learning all this stuf fon your own? Not tlaking about the motivation. What's your approach for studying on your own with good results?

>> No.6785599

>>6784108
rec's on psychology and music theory pls

>> No.6785601

>>6785594

I buy index cards in bulk. Index cards are the greatest learning tool ever devised by man. Compact, easy-to-digest bites of information that stack easily and can be taken with you on a long train ride.

Putting yourself in the mindset also helps. Pretend you're in a class with a pass/fail grading system. It really lights a fire under my ass. Might work for you too.

>> No.6785606

>>6783929
The wiki is useless since they stopped editing it, and locked out people who wanted to keep improving it (i.e. me)

>> No.6785612

>>6783911
i've been a teacher's assistant on i think 7 CS courses. the advice you received in this thread is pretty excellent, which is frankly surprising for 4chan, which has a bad tendency to over-represent SICP and MIT courses

Python -> C is an excellent progression for a beginner. a popular *very very hand-holdy* intro to Python is Learn Python The Hard Way
http://learnpythonthehardway.org/book/

C is not mandatory for a hobbyist but I consider it mandatory for any serious professional. i spend a LOT of time "deprogramming" students with no C experience. i think it would be hard to understand how a computer works without knowing some C.

if at some point you want to make the transition from hobbyist to like an undergraduate level of study then a well-known online course in C is harvard's cs50:
https://cs50.harvard.edu/
but to clarify this is not a course "on C", it is a course on computer science. learn the basics of programming first

>> No.6785614

>>6785612
btw, the cs50 syllabus has a lot of recs for intro to C books

>> No.6785656

Why are pythonfags so intent on ensuring that beginner programmers have the same mental illness they do

>> No.6785669

>>6785656
What do you suggest then? The fact that I recommend python heavily doesn't mean I program in python frequently, if at all.

>> No.6786316

>>6785669
LISP

>> No.6786321

>>6786316
Hell fucking no.

>> No.6786383

>>6785669
Something statically typed. You need to know the rules before you can break them.

>> No.6786429
File: 43 KB, 924x534, grjtrerwegwg.jpg [View same] [iqdb] [saucenao] [google]
6786429

>>6785612

You're great. Thanks a lot.