You are not logged in.

#1 2016-08-20 01:53:49

xbadog
Member
Registered: 2016-08-14
Posts: 24

(SOLVED)What to do after learning basics in Programming?

Hello, I have learned the basics of programming in C. I know how to do most arithmetic and I would say I am pretty fluent in reading scripts.

I just don't understand where to go next. What can I actually "Do" with knowing these basics. I mean, I have pretty good ideas for programs I would like to create, but every tutorial or book I have read doesn't really explain how people create these "games, scripts and tools". They all (atleast, all I have read) seem to just cover how to write the "Hello World" script and then explain how to perform arithmetic within the said programming language. I don't understand the significance (lack of a better word) or maybe...
The technique?

I really don't know how to word this properly, but if anyone could give me some pointers or explain what I can actually do with programming I would be grateful.

Last edited by xbadog (2016-08-21 17:52:39)

Offline

#2 2016-08-20 21:14:31

Henry Flower
Member
Registered: 2010-04-12
Posts: 63

Re: (SOLVED)What to do after learning basics in Programming?

I can recommend CS50x and (if you don't mind changing languages) Introduction to Computer Science and Programming Using Python, both on the edx platform, and both very practically-orientated.

Offline

#3 2016-08-20 21:30:48

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

Thank you Henry, I will check those out. I have gone through several videos on CS (MIT OpenCourseWare) and have the syntax down for Python as well. I have also read a book on Java, and I have "Hacking, The Art of Exploitation 2nd ed." which teaches C. I have watched several videos on C++ also.
But my problem is, how exactly do I apply all these mathematics syntax and scripts into something I can use to be a good programmer? I am extremely comfortable in Arch and any other Linux environment, so I know how to do all the things associated with that. I can read code and tell what it does 70% of the time. But how do people go about being fluent in a language and being able to create something off the top of their head?

I have ideas of programs I would like to create, I just really have no clue where to begin or how to use all of these arithmetic syntax I have learned to create something I desire.

Recently I have been reading on creating virus's and other nasty stuff with .bat files, as a basics, and now I am progressing into more intermediate hacker (white/grey?) concepts.

I am perfectly fluent with following guides, instructions, google, computer/linux literacy. I just can't for the damn life of me figure out how to create(my own design) tools, without basically copying what someone else has already created.

I sincerely apologize for my sentences. I am very tired, and I really don't know how to word what I am thinking or wanting to say right now.

Offline

#4 2016-08-20 22:08:59

Alad
Wiki Admin/IRC Op
From: Bagelstan
Registered: 2014-05-04
Posts: 2,412
Website

Re: (SOLVED)What to do after learning basics in Programming?

Try to join some communities specifically aimed at the languages you're interested in. For example, .BAT has dostips.com and ss64.com (though batch is both more crude than posix sh and more quirky than Perl; on Windows, consider Powershell or Python instead). Bash has #bash, #sed and #awk on freenode. Assembly has /r/ReverseEngineering on reddit and various others.

Learning syntax alone isn't good enough. Any course worth their salt will have you write programs of your own as part of the course - for C, K&R is a good example. Speaking of, look at this video:

https://www.youtube.com/watch?v=Sg4U4r_AgJU

Last edited by Alad (2016-08-20 22:14:13)


Mods are just community members who have the occasionally necessary option to move threads around and edit posts. -- Trilby

Offline

#5 2016-08-20 22:30:15

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

Nothing and everything. It looks like you don't need C at the moment. You're currently in a hardware store and you have already memorized the names and stats of all the copper pipe pressure valves (but not the plastic and steel ones) and you approach the clerk and ask what to do with them. What will he ask you? "What are you trying to build?", most likely.

I have always wanted to learn some programming languages, but I never took off beyond the basics before I actually found something that didn't exist yet in the form people needed it. It is as simple as that: Programming is not a very good academic activity, if you do not experience an intrinsic motivation to find problems to solve. Programming is such a big buzzword and people are indeed drawn to it like moths to the light, but it really is just a tool you need to perform specific tasks. I have basic blacksmithing capabilities, I can forge a simple blade, but I actually don't need any more blades, because the ones I have are sufficient. My intrinsic motivation to engulf myself in the art of forging metals is not strong enough to start expanding my knowledge, or at least it was, until I was confronted with a problem in the house that couldn't be solved by warming up some mild steel, so I read about different types of steel and made myself familiar with the most basic basics of alloy creation.

A similar story happened with me and programming: I was absolutely fine with the different shell script languages like bash and BATCH, for the better part of two decades, because most of my work and private use consisted of administration tasks. I occasionally learned some other languages, like C, Python or Lua, because I wanted to modify existing software by writing small patches to fix bugs, modify behavior and add small features. I can read most higher languages to some degree (some more, some less), as long as I don't encounter weird "clever" constructs and language specifics. It's like spoken languages, I know English, German, some French and a little Latin, so I have a chance at deciphering Spanish, Italian and Portuguese as well (depending on the complexity of the text and how much time I have). It was not until I was asked, whether a certain software already existed and, if not, whether I could see to it that it does, that I deepened my Python and learned Qt from the scratch. The difference between learning what I call "academic programming" the way you would do in Computer Science at a University, from a book or some tutorial website, and "learning by doing on demand", is gigantic. I never have to ponder over what to learn next, because I can barely keep up with what I don't know and it's always the question of how to solve a specific problem, and never about what problem to solve.

You don't seem to be the academic type, you need to find use for your knowledge. I don't want to discourage you, but if you cannot come up with one single piece of software, that you would want that has not been written yet, or that does not exist in the very form you would want it to, then you should ask yourself, whether the world really needs another uninspired programmer. If you, however, can at least find one thing you want, then accept this as your goal. Either start looking up how to do it from the scratch, which will keep you busy and your knowledge will at first broaden but not deepen, or you find a project that already does some of what you want and start modifying it or even contributing patches (this is the heart, soul and essence of Open Source and free software after all), which will deepen your knowledge in a specific part of probably only a specific subset of a language, but it will do so quickly.

There is also another way. You could adapt your mind set. Step away from "programming" for a second and understand, that this is more than writing code and more than computer science, it is informatics. In the past, we didn't have "computer science" in Germany, we had informatics (until our education system was assimilated into the BA/MA system and everything went "downhill"). Wikipedia has a nice article explaining the differences. The essence is, that programming is only a tool to solve specific problems, so in order to master programming from an academic (or theoretical) point of view, you need to embrace a "problems first" mentality, that allows you to override your intuitive every day actions and to analyze the world around you, so you can formulate a simple abstract program for everything. Instead of simply writing a grocery list, come up with simple formalisms: IF eggs =< 5 THEN add eggs to grocery list. I recommend having a look at Cooking for Geeks by Jeff Potter, which is my favorite example for a programmer's mentality translated into a seemingly mundane environment.

If you're still reading, I recommend doing all of the above (and below), in no particular order and rather all at the same time (but never all at once).

° Stop managing your files and folders manually, write a script for everything. It will give you decent practice with the imperative and procedural aspects of programming and it will train you in spotting syntax errors and possible pit falls. Since you will need to have a backup of all your data, start by writing your own backup script and a suitable systemd service file. I recommend rsync, but that's just my preference.
° Find some software you know (as in you have used it and know what it does), use it extensively for a while and then start reading the source code. Say, you use ncdu and wonder how the text interface works, so you do some research and discover how it uses ncurses.
° Pick a language, that does anything interesting for you. I mostly work with data and databases, but I rarely do anything interesting with the data, so good pick for me was some object oriented language (I hate OO, but there it is) with drivers, modules and bindings for as many database types as I could find (Guess what: Python. Boring, huh?). If you are interested in device drivers, stick with C (and always glance one step below at assembler types and one step up towards C++). If you have a drug problem or happen to be interested in computational linguistics, try Prolog (or try Prolog anyway and every time you feel down and depressed, remember that some people write in Prolog for a living).
° Liberate yourself from the influence of buzzwords. Recognize the fact, that programming is nothing and asking what to do with nothing only makes sense, if your first name is Winnie.
° Read those: http://catb.org/esr/writings/unix-koans/index.html.
° See the world as a web of process chains and recognize, that programming concepts can apply to everything empirical and predictable.

Or:
° Enroll in some classes and let them turn you into a role model code monkey. It answers your immediate question. It will, at some point, raise another type of question ("Why am I this and not a carpenter?", "What is the free time everybody is talking about?", "WORMS IN MY BRAIN GET THEM OUT" (not strictly a question, though full of implicature)).

Offline

#6 2016-08-20 22:57:59

TheChickenMan
Member
From: United States
Registered: 2015-07-25
Posts: 354

Re: (SOLVED)What to do after learning basics in Programming?

I was thinking of a way to try and answer this question but couldn't think of how to do it properly in less than a full-out essay. I guess you couldn't either. Seriously though, you're more than right about needing to find and analyze a problem first before worrying about which solutions you need. Figuring out "how to learn python and what to do with it" is a whole lot harder than being confronted with something which needs to be done and figuring out how to do it. That "how to do it" with computers often involves learning some code. Also worth mentioning is that once you've done a little bit you notice that writing in programming languages are all pretty similar. It all comes down to looking at your problem and figuring out a simple and structured way to write that down using math and functions. Once you lookup the basics such as a language's IF-ELSE, LOOP and know some basic syntax it's really all about writing or looking up the functions you need to solve the problem you have. So... to the OP, what problems do you have, what do you wish your computer can do that it can't currently do?


If quantum mechanics hasn't profoundly shocked you, you haven't understood it yet.
Niels Bohr

Offline

#7 2016-08-20 23:02:26

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

TheChickenMan wrote:

but couldn't think of how to do it properly in less than a full-out essay. I guess you couldn't either.

https://www.youtube.com/watch?v=83nfRx6nf0s ?

Offline

#8 2016-08-20 23:12:20

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

Lol Awebb, thank you for that great response. I have a problem with leaving out a lot of information when I speak or type to someone(s), mainly because it isn't exactly necessary *most* of the time. I should go on to say, that I don't quite understand what you mean by "academic type". I think that you have made a conjecture of me without hearing or knowing my mind-state. I am the type of person that focuses on one problem or focus-point until I achieve my desired effect. Computers and especially the Gnu/Linux, are my never ending passions. I will work on my computer day in and day out and have not found a problem I haven't been able to solve. I don't exactly have a "social" life because I would much rather be hacking away at my keyboard and trying to seek/solve any problem I can find (and most of them I create for myself). Once I learned a good portion of how Linux works and everything it is capable of, and my never ending drive to learn ever more about computers, programming seems like a good next step.

I am not able to take an "Official Course" or even to actually buy a lot of books on my subjects, so I end up having to teach myself a lot of stuff related. I cannot express this to it's entirety, but computers are my life. My passion. My reason.

I understand your initial viewpoints, as I can see where a lot of people would actually gravitate towards the word "programming", but just as an example, I have been up for 28 hours reading and watching videos on programming and different hacking techniques. Now, don't take this phrase "28 hours" to mean that yesterday I woke up and decided I wanted to be a computer geek and a programmer. I have been using various Linux distros for over 4 years (I know this is not a lot compared to some people) but I want to point out that this isn't some "fad" I am trying to pursue.

Like I said, everything I know about computers and Linux is self taught, from several very frustrating years. Most days I cannot even go to sleep unless I am absolutely satisfied with what I have done.

As for your "learning by doing on demand", I completely agree. However I have no outlet for such a cause. Everything I do is for my own personal gain/knowledge. And I would never relate this to "Why am I this and not a carpenter?" because this *is* my genius. This is what I will pursue for the rest of my life. I am having difficulties right now in Applying what I am trying to take in. I don't have a mentor/teacher. I don't have official courses. I have the internet, my mind, my laptop, and a few books.

****Thank you Alad for your YouTube link, I had just begun watching it before I got the notification for Awebb's response, and I figured that since they took the time to make such a fullfilled reply I should do the same.

I don't claim to be an expert on programming OR Linux by any means, I am just trying to get my foot in the door to becoming a developer. This is my dream and I have been working patiently.

As for practical programming ideas, like I said, I have a few in mind on what I would like to create. One would be an anonymous email-to-SMS program. But I think I am a long ways off before I could even attempt something like that.

I chose C to start with, for one because Linus Torvalds and Richard Stallman both used it to create Gnu/Linux. And I may be misguided but I believe it was said, that even though it is considered "low-level" or even "mid-level" programming language, that you could accomplish any general task with it. I really don't know what language would be *THE* one to stick to and try to master & tame, but you gotta start somewhere.

But no, I am not the "academic type" as in I go to college, and participate in paid group courses. Completely self reliant for all of this... Well, and with the help of a few Arch guys.

Offline

#9 2016-08-20 23:21:43

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

@TheChickenMan, I don't have many problems I can think of off the top of my head, but I would just like the ability to program/develop whatever I wished. I am hopeful that by learning good and practical knowledge of a programming language, I will be able to create/find problems or solutions. I have even debated on trying to get into the Arch/Hurd development.

Offline

#10 2016-08-20 23:36:11

ewaller
Administrator
From: Pasadena, CA
Registered: 2009-07-13
Posts: 19,778

Re: (SOLVED)What to do after learning basics in Programming?

Whenever I see a thread like this, I am reminded of the old adage, "To the man whose only tool is a hammer, all problems look like a nail"

I have dabbled in many languages C, C++, Pascal, Forth, Java, Python, PL/C, Fortran, Lisp, BASIC, and several assembly languages.   I pretty much use C and Python now.
I like C when I need to get close to the hardware.  It is fast, and makes it trivial to shoot yourself in the foot.  It is also the go-to language (IMHO) when one needs to build hard deadline real time systems. The closeness to the hardware is largely why the kernel is written in C.  I prefer Python when I need to do things at a high level with minimal development effort and don't care about real time.

C is an interesting language.  Most people are not proficient at it.  It is a language that allows you to program in BASIC using a C compiler if you wish.  In other words, it is possible to write "C" programs without understanding pointers, stack linking, memory allocation and management, structures, etc...      If you really want to understand C, I might suggest working through an old book called "The C Puzzle Book".  It is a great example of how not to write code; but it will provide clarity as to some of the deeper aspects of C.

http://buhoz.net/public/books/lenguajes … E.BOOK.pdf

Take a close look at "Pointer Stew"

Last edited by ewaller (2016-08-20 23:38:17)


Nothing is too wonderful to be true, if it be consistent with the laws of nature -- Michael Faraday
Sometimes it is the people no one can imagine anything of who do the things no one can imagine. -- Alan Turing
---
How to Ask Questions the Smart Way

Online

#11 2016-08-21 00:07:15

Steef435
Member
Registered: 2013-08-29
Posts: 577
Website

Re: (SOLVED)What to do after learning basics in Programming?

I'm not a programmer, just a simple hobbyist, but this is how I keep myself busy (all of this has already been mentioned before, this is just *my* selection):
- Lurking in communities, answering questions I can answer (I used to be pretty active on a Dutch C++ forum back in the day, learned a lot)
- Reading source code. Looking stuff up in documentation when necessary. Stopping before I go insane.
- Writing stuff. Inspiration is either: "hey, wonder if I could create this myself" (the answer is usually "no") or an actual problem I want to fix. Games can work nicely as well, opengameart.org has a lot of nice assets you can use. If I can't come up with a problem myself, I look for problems of others. One of the first things I worked on was a small notes app for my little sister. These are the best kind of projects, because people actually end up using your work and giving feedback or other things you could work on. Quite motivating. Recently, I've been working on a way to easily manage chords and lyrics for songs (git repo with plain text files in a self-designed format) and to print them to paper (a song must always fit on a single page). More than three quarters of this "writing" actually consists of reading documentation, searching the web and banging my head against whatever is directly accessible.
- Exploring new languages / libraries / data representation formats / styles to broaden my vision. If I'm thinking of fixing something, I don't start with "how do I do this in C++?". I start with: "using what language could I get this done most quickly/efficiently/portably?".

Offline

#12 2016-08-21 00:49:37

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

@ewaller, thank you for your input and for the link. I will download it and look into it sometime tomorrow. Btw, that quote is really cool. I'll have to try to remember it for future references. smile

@Steef435, you make a lot of really good points. I do a lot of the same stuff but in a different manner. I have purposely broken my Linux installation several (30-50x) just so I had an excuse to do something. It is really all about keeping your mind busy and not letting that boredom feeling take over. As for your guitar riffs/chords and lyrics, maybe try this site https://www.ultimate-guitar.com/  if this is what you meant by plain text files. I don't know your country of origin but I use this site all the time when I want to learn a new song on guitar. We call them "tabs" in US.

Last edited by xbadog (2016-08-21 01:04:42)

Offline

#13 2016-08-21 11:53:21

Morn
Member
Registered: 2012-09-02
Posts: 886

Re: (SOLVED)What to do after learning basics in Programming?

My advice would be to go to github.com and look for a project that interests you, e.g. since you mentioned email and SMS, maybe some small networking-related Python project. Then clone/fork it and try to understand the code, then extend it by adding features.

To learn how to program you have to read other people's code, because knowing the syntax is not enough; you have to learn the typical programming patterns in a language. All programming languages do the same thing fundamentally, but still you have to learn the way elements are combined into larger structures.

Python is very readable and compact, so I would recommend to look at Python first and maybe C later. The advantage of C (or even assembly) is that is gives a better low-level understanding of a computer, which may be helpful for performance optimization in higher-level languages too.

Last edited by Morn (2016-08-21 11:55:12)

Offline

#14 2016-08-21 17:52:14

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

@Morn, thank you for your advice. I have heard that in the Linux and opensource sphere, that good programmers will take an already built package and use that as the base structure for what they want to make happen. Implementing features and ect. example would be, "The Cathedral & The Bazaar" in a sense.

@To All, I will use pretty much everyone's advice and focus on Python to begin with instead of C right now. I like how simple Python is and from what I have learned the past days, that it would be best as a foundation to start programming. After I have learned Python and can actually be fluent and make programs that are usable, I will move on to C and possibly Awk, as per @Alad's video link https://www.youtube.com/watch?v=Sg4U4r_AgJU. I thank everyone for taking their own time and patience to respond to my post and give me advice on what I needed to know and should pursue next.

"When your only tool is a hammer, every problem looks like a nail".

Offline

#15 2016-08-22 09:17:47

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

Well, when your only tool is a python, every problem looks like a snack.

Offline

#16 2016-08-22 22:50:24

sonoran
Member
From: sonoran desert
Registered: 2009-01-12
Posts: 192

Re: (SOLVED)What to do after learning basics in Programming?

There is a thread on the Fedora Forum that documents the implementation of a non-trivial project: http://www.forums.fedoraforum.org/showt … p?t=298342
As a bonus, you could join the Forum and discuss it all with the developer.

Offline

#17 2016-08-31 20:06:34

bullet
Member
Registered: 2016-08-04
Posts: 18

Re: (SOLVED)What to do after learning basics in Programming?

I'm kind of confused by all these answers, they completely miss the problem at hand in my opinion.

If you want to go from having read a C book to programming in C, you need a project. Back when I learned programming languages, I tried to learn about socket programming in the respective languages and try to write IRC bots. That worked for C/C++/Perl. It gave a goal, it forced me to learn new things and it was fun.

I don't see how reading big projects is of any help when you're completely new. I don't see how going to github and trying to get involved (that's impossible at that stage), and I don't see why people here feel the need to point out the inadequacies in C and recommend other languages. That's downright rude.

I know quite a few programming languages and I know exactly the problem OP is in. When I first started playing with functional languages, I had exactly the same problem. I knew the syntax and stuff - now what. The solution is deciding on a program/tool to write, and do that by learning everything needed to get it working. The difficulty is judging the difficulty of the problem. Writing small games is possible - if you're not using C because stuff like that is inherently difficult (relatively speaking) in C. Sometimes the only thing working to get started is artificial problems, like, write a very simple phonebook program that allows you to add/retrieve/delete contacts and possible save them to disk (and read them back in of course). That problem requires you to come up with an interface to do all the actions, requires you to learn file I/O, requires you to think about data structures and so on. It gets you started.

Or write a tool that walks a directory and prints filenames and filesizes. Or small tools that read a file that count bytes. Just invent a problem and then force yourself to solve it so you get going.

After having learned a language's syntax, the next step is learning APIs. This is what allows you to actually do something with code!

Offline

#18 2016-08-31 20:38:50

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

bullet wrote:

I'm kind of confused by all these answers, they completely miss the problem at hand in my opinion.

You probably have not read all of them. The essence of most of the replies is: "Time to start hacking". There is no point to miss. Even if OP went on with API's and libraries, he'd end up coming back, still not knowing what to do with all this knowledge.

The actual problem is, that OP is enchanted by the magic of this ominous "programming", but doesn't know what to do with it. Looking at some random project written in C will not automatically solve this, but OP will see all those libraries and then the jump from basic syntax to specific questions about how to use libraries and how to create them will be natural and self-evident. In the end, your advice is in agreement with the others: Find a problem to apply your skills on. I also cannot find anybody pointing out inadequacies of C. It has been suggested, that Python is a formidable tool for a beginner, not because C sucks, but because Python sucks at being void. Every Python intro I've seen so far will grab your head and push your nose into the import command. The point has even been raised, that C is better to teach you more about low level processes. In the end, nobody is forcing OP to use Python, we simply share our own experiences in different steps of the learning curve.

Offline

#19 2016-08-31 20:53:09

xbadog
Member
Registered: 2016-08-14
Posts: 24

Re: (SOLVED)What to do after learning basics in Programming?

Thanks for the new replies!

I am currently using "Codecademy" as a learning tool. Although I have slacked off for a few days. I have created stupid programs so far such as a Pyglatin Translator, as walkthrough by Codecademy. I really like the simplicity of Python, and although I had touched on it before, I am much more proficient at it now. Codecademy does have its own problems though, as it isn't built very well and can't interperet all the different ways to write a single program. I've also been able to cheat a few lessons with some hacks pertaining to what they wanted me to code. They also are very annoying sometimes because my code will be correct and they will want it written the way they've designed their program to decifer mine.

I will be touching back on C and perhaps C++ in the future, but I think its better "For Me" to learn something that is simplistic and quick to learn, such as Python. Also Python would be a great way to create a prototype that I might want to test before optimization in C/C++.

I am beginning to think more about programs in everything I do. Such as I have wrapped my head around that a game, for example, is nothing but numbers & code and some visual images. I have been able to actually write pseudocode about how I think this game is working and what they did to implement certain features. Thinking like a coder wink

I have finished the Syntax and gramatics and theory part of the Python Tutorial, and now they are walking me through small projects. And as much as I get annoyed with Codecademy's problems, it has helped me a lot and I would recommend it to people wanting to just even try it out, if they have enough patience.

My wizardry continues, and maybe next year I can go to Defcon wink

Offline

#20 2016-08-31 21:33:23

alphaniner
Member
From: Ancapistan
Registered: 2010-07-12
Posts: 2,810

Re: (SOLVED)What to do after learning basics in Programming?

I went through CA's Python program a while back and found it uninspiring. Generally, I find free-of-charge introductory material is poor outside of official resources (eg. Python, Java, JavaScript).


But whether the Constitution really be one thing, or another, this much is certain - that it has either authorized such a government as we have had, or has been powerless to prevent it. In either case, it is unfit to exist.
-Lysander Spooner

Offline

#21 2016-09-01 11:00:53

Morn
Member
Registered: 2012-09-02
Posts: 886

Re: (SOLVED)What to do after learning basics in Programming?

bullet wrote:

I don't see how going to github and trying to get involved (that's impossible at that stage)

You would be very surprised! With Python, I've had people with zero prior knowledge of either programming in general or Python in particular make useful changes to my GitHub projects to adapt them for their specific needs, all within an hour of first looking at the code (as evidenced by the emails they sent, essentially live-blogging their progress)! I've seen this multiple times and was always amazed how quickly they went from "what's all this?" to "never mind, I've found the lines I had to change".

At least for native English speakers, Python is very easy to understand, or maybe Americans simply have some kind of intuitive understanding of programming, because it was always Americans that did this. I guess programming and home computers are deeply ingrained in the American collective unconscious in a way they are not in Europe.

Of course the disclaimer here is that my projects tend to be a few 10's of kB tops, not several MB of source code. So I certainly don't claim this approach would work for e.g. the Linux kernel.

But in my view Python is the magic sauce that enables beginners to be productive very, very quickly. It's today's Basic equivalent without the downsides of 8-bit Basic (i.e., spaghetti code). And unlike Basic, programming pros typically value Python too and are productive in it. That's not dissing other languages, it's simply a fact.

Offline

#22 2016-09-01 11:19:00

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

Morn wrote:

At least for native English speakers, Python is very easy to understand, or maybe Americans simply have some kind of intuitive understanding of programming, because it was always Americans that did this. I guess programming and home computers are deeply ingrained in the American collective unconscious in a way they are not in Europe.

Please, enough! The poor dog! The poor dog ...

EDIT: The poor neighbor's dog jumped over the fence, crossed the yard, ran into my office through the open garden door and sniffed and whined, because he was worried I might be hurt and die, because I was sitting in front of my screen, my hands cramped around the border of my desk, screaming, yelling and laughing. My lungs hurt. The poor dog ...

Last edited by Awebb (2016-09-01 11:22:24)

Offline

#23 2016-09-01 12:15:12

Trilby
Inspector Parrot
Registered: 2011-11-29
Posts: 29,523
Website

Re: (SOLVED)What to do after learning basics in Programming?

Morn wrote:

or maybe Americans simply have some kind of intuitive understanding of programming

Having taught in a few American universities and work with countless student who wanted to learn programming, I can tell you nothing is further from the truth.  Sadly I'm finding that I'm horrible at *teaching* programming - though I am pretty good at mentoring new programmers and/or providing suggestions or feedback.  This has led to to a suspicion that is greatly at odds with my general teaching philosophy: there are some people who will just "get" programming and others that will not ... ever.

I've had people who claimed to have tinkered with programming and learned a few languages, yet when I try to help thm through the simplest computational challenges I'm just left dumbfounded - I stop short of screaming "What the hell is wrong with you".  Then in contrast to that, I had an intern this summer who claimed to have ZERO programming experience - even his computer experience was limited: he could type something in MS word, and could use facebook.  But every time I showed him something new, he just instantly got it.  I'd show him an example of something relatively advanced thinking it would be a teaser of what he might be able to do in the future.  But it instantly just made sense to him: he could use the example I gave, extrapolate from it, and use the components of that example in new ways to solve new problems.  He's now left and has gone back to his undergraduate training - but he is adding a CS minor to his training.

Regardless of experience or lack thereof, some people just seem to be able to "think like a computer" and others cannot.  I really wish I could teach this skill, but I've learned that I'm completely unable to do so.


"UNIX is simple and coherent..." - Dennis Ritchie, "GNU's Not UNIX" -  Richard Stallman

Offline

#24 2016-09-01 13:21:43

Awebb
Member
Registered: 2010-05-06
Posts: 6,286

Re: (SOLVED)What to do after learning basics in Programming?

Trilby wrote:

Regardless of experience or lack thereof, some people just seem to be able to "think like a computer" and others cannot.  I really wish I could teach this skill, but I've learned that I'm completely unable to do so.

A programmer's mindset is something that must be understood outside programming first. If you can show your students, that a) everything you can observe is very likely to follow a "cause and effect" principle, b) everything you do can be broken down into smaller steps and c) a black box is never atomic, but either not yet observed sufficiently or simply irrelevant for the scope of your observation, then they are likely to understand the basic principles of this magic programmer's mindset, which is really only the point, where analytic and creative methods meet and start to complement each other.

Cooking and baking are my favorite examples. You have ingredients, you have a recipe and you have an oven. This is all you need to bake a cake, which is the equivalent of a systems integrator's work, who takes software (source code or not) and bakes a system. If you want to create your own recipe, you can either start by modifying existing recipes and observing the result. If you have observed the delta long enough, you know enough about the different ingredients to bake a great cake. This is what most Linux users do, we patch software (locals use the AUR and modify the PKGBUILD) without actually understanding the code. You can even go one step further and explain the chemistry behind your recipe, for example you could find out why adding yeast and lactobacillales will increase the volume of your pastries, which is the equivalent of reading the source code of that obscure library you imported in Python, once the wisdom of the docstrings has reached its limit. You might even go further and expand your knowledge beyond what you have observed, say you can't stomach yeast, but you want to have that fluffy bread you love so much, so you discover that there are other sources of carbon dioxide, that are not only bio-compatible but even fully digestible, like sodium hydrogen carbonate, and bake with natron on occasion.

If you complement this purely observational learning process by approaching the relevant information from a theoretical point of view, studying chemistry or - in case of a programmer - studying algebra, analysis, set theory, propositional logic and topology, you will be able to work in both directions: You will be capable of baking a good cake that might even accommodate some sort of pastry Zeitgeist, but you will also be able to realize, why you have to add a stabilizer to whip your cream, and why you can ditch that, if you simply buy cream without carrageenan.

There is an unfortunate obstacle: A lot of people are very preoccupied by things so abstract, that nobody has come up with working theories about it. People often think about what other people think about them and other people. They will get annoyed, if anyone starts to logically deconstruct this social entity. The randomness in social behavior occupies so much of our mental capacity, that we feel (or rather that we are biased to believe) that the world around us is not the logically deconstructable apparatus, that consists of observable rules and reproducible cause-effect relations. Our ability to think rationally and twist thoughts into abstractions is largely intuitive and often even out of control.

Short: Teaching programming is convincing people, that they are assholes and that it's not what they want to be.

Offline

Board footer

Powered by FluxBB