Hard to settle with a starting programming language
Hard to settle with a starting programming language
It's so hard for me to settle with a starting language for me with no prior real programming experience. Except for the occasional "Hello World" or other small code tutorial on the web. I tend to have minor cognitive issues (processing information and etc.) It's Asperger Syndrome, and I was diagnosed with it in my school years. I am also lost as what I want to achieve. I don't see myself as developing games because it doesn't seem like I would fit. OSDeving sounds cool, but I want to begin slow and steady with general coding at first. Maybe web or app making, but a host will cost a fee, something I'm not ready for yet.
Can anybody recommend any guide for my (ongoing) coding journey?
I'm probably going to be treated like an intellectual inferior here...I did suck a bit at math through all my school years. I'm not real good with math at all..
Can anybody recommend any guide for my (ongoing) coding journey?
I'm probably going to be treated like an intellectual inferior here...I did suck a bit at math through all my school years. I'm not real good with math at all..
-
- Member
- Posts: 89
- Joined: Tue Feb 26, 2008 10:47 am
- Location: Sweden
Re: Hard to settle with a starting programming language
To be honest, for your first language, you might as well just roll a die to pick one. Then when you get a feel for what Programming is and what you'd like to do with it, you can read up on a couple of other languages and think more carefully about what you need.
That said, I've heard recommendations for python as a starting language, and I'd be inclined to agree. It's easy enough to get something that works up and running quickly, and advanced enough to make some really complex and large projects later on. Also quite universally available and with a good collection of third-party libraries.
And, as always, asking 10 people about the best programming language, you'll probably get 15-20 widely different answers.
That said, I've heard recommendations for python as a starting language, and I'd be inclined to agree. It's easy enough to get something that works up and running quickly, and advanced enough to make some really complex and large projects later on. Also quite universally available and with a good collection of third-party libraries.
And, as always, asking 10 people about the best programming language, you'll probably get 15-20 widely different answers.
Re: Hard to settle with a starting programming language
It's probably best to adjust unrealistic expectations first.You are probably not ready for operating system's development. To truly succeed at osdev, you must become an expert on what you are doing and what your code is doing. You don't have to be an expert from the start, but you must be able to reason about exactly what your code does and what is happening, to have a lot of confidence in this area.
You say that you are lost as to what you want to achieve. This is a problem. Without a goal, an utility function, it's hard to help you get what you want. You should think about whether you want to do it for fun, to accomplish something, to learn something, to get clarity from having built a whole system and understanding all of it, to be a programmer, to challenge yourself, to make a profit, to trick people into thinking you are an osdever, to contribute to the osdev wiki, do something interesting, keep boredom away, and so on. It's entirely up to you want you want to do. It helps if you can define this. Try examine your mind, find out why exactly you want to do osdev or general programming, look for that little thought, write that down and accept it. It's generally helpful to examine what you want to do and your motivations to do so. For instance, if you are not getting joy from it, something might be wrong, and you should consider what you actually wanted to experience.
Paying for a webserver is generally pretty cheap these days. Don't use that as an excuse. You probably use more money on food and other forms of entertainment. Don't forget to divide the cost with the amount of use you get out of it. For instance, if you go watch a movie, you only see it once, and then that money is gone, while a website can be useful every day. Web programming, though, is distinctly different from more traditional general purpose programming. I personally don't enjoy web programming and don't do it. You might feel different. There can be a shorter feedback cycle between doing work and experiencing results than with operating systems development, leading to a better flow and building of confidence.
I don't know the particulars of your asperger syndrome and how it affects you. I've heard of people where cognitive disorders have been turned into personal strengths in some areas, while in others it is just a cognitive disorder. I don't truly know anything about this, really. As a first approximation of bad advise, I'd wonder if your lack of math skills is due to teaching methods that were unsuitable for you, or whether you have not yet learned proper ways of reasoning about mathematics. Simple school math can be confusing because it doesn't make rigorous sense. I'm personally more confused by a poor explanation than a true one. If you want to learn math, find out which ways of learning it actually work, and which ones don't. For instance, class room teaching, self-study, one-on-one tutor sessions, lecturers, online videos (see khan academy for instance), reading excellent books on mathematical concepts (I'm reading Gödel-Escher-Bach these days, I think it introduces some advanced topics in a very approachable manner compared to how you usually learn it at university), and so on. Find out what works, what doesn't, then use the methods that do work. There are methods you might think, but immediately reject automatically and prematurely (like asking for help, or bribing someone), try not to do that, but instead think of why you truly rejected that method, bring it to a coherent conscious thought. I've made my idle thought to think about what I am doing, what I want to do, how to optimize that; and found it useful.
Being good at math (like calculus, vectors, and what not) is useful as a programmer, but isn't that truly crucial. What, however, is crucial is the ability to reason systematically about your code and be right. You'll pick this up with practice. There is a similarity with math here, as you need to be rigorous, but you can also pick up short cuts where you can convince yourself of something complex by seeing a few patterns and knowing something follows (like if seeing x = 6y, you know y = x/6 immediately without doing all the steps to isolate y). Programming might improve the same thought processes in math, although experience does matter there too.
It's probably a good idea to also locate people that you think you can learn from, or can learn with, topics that you decide interest you. If this works, you can create some social pressures in the group that drive you all forward.
If you want to do osdev, you probably would do well getting to learn to do C programming well (do this on Unix, it's yuck on Windows). This might be hard. Starting to master something like Python is probably a good start, I think that's a decent language to learn and also useful as an experienced programmer. Every post will probably suggest something different. Don't be too quick to rule out their advise. But it's easier to pick technology when you have concrete goals. I would suggest some simpler goals so you can develop a flow where the challenges fit your skill and you have a positive feedback loop.
These are just some random thoughts based on my personal experience. I don't know your situation well enough to give you proper advise, so I gave some meta-advise to help you figure out what to do. You might have to read this post a couple times and not immediately reject all ideas. Or perhaps it doesn't apply to you.
Note that I'm not treating you as an intellectual inferior here. I get why you fear that reaction, and people might think that when seeing this topic and being unable to give any useful advise, but that's just them defaulting to victim blaming. It's definitely a problem on these forums, where someone posts a hopeless topic, and established members think of that person as hopeless. You're not doing that here. You are going one level higher and posting a meta question where you ask for help getting a coherent direction. That's a good thing.
You say that you are lost as to what you want to achieve. This is a problem. Without a goal, an utility function, it's hard to help you get what you want. You should think about whether you want to do it for fun, to accomplish something, to learn something, to get clarity from having built a whole system and understanding all of it, to be a programmer, to challenge yourself, to make a profit, to trick people into thinking you are an osdever, to contribute to the osdev wiki, do something interesting, keep boredom away, and so on. It's entirely up to you want you want to do. It helps if you can define this. Try examine your mind, find out why exactly you want to do osdev or general programming, look for that little thought, write that down and accept it. It's generally helpful to examine what you want to do and your motivations to do so. For instance, if you are not getting joy from it, something might be wrong, and you should consider what you actually wanted to experience.
Paying for a webserver is generally pretty cheap these days. Don't use that as an excuse. You probably use more money on food and other forms of entertainment. Don't forget to divide the cost with the amount of use you get out of it. For instance, if you go watch a movie, you only see it once, and then that money is gone, while a website can be useful every day. Web programming, though, is distinctly different from more traditional general purpose programming. I personally don't enjoy web programming and don't do it. You might feel different. There can be a shorter feedback cycle between doing work and experiencing results than with operating systems development, leading to a better flow and building of confidence.
I don't know the particulars of your asperger syndrome and how it affects you. I've heard of people where cognitive disorders have been turned into personal strengths in some areas, while in others it is just a cognitive disorder. I don't truly know anything about this, really. As a first approximation of bad advise, I'd wonder if your lack of math skills is due to teaching methods that were unsuitable for you, or whether you have not yet learned proper ways of reasoning about mathematics. Simple school math can be confusing because it doesn't make rigorous sense. I'm personally more confused by a poor explanation than a true one. If you want to learn math, find out which ways of learning it actually work, and which ones don't. For instance, class room teaching, self-study, one-on-one tutor sessions, lecturers, online videos (see khan academy for instance), reading excellent books on mathematical concepts (I'm reading Gödel-Escher-Bach these days, I think it introduces some advanced topics in a very approachable manner compared to how you usually learn it at university), and so on. Find out what works, what doesn't, then use the methods that do work. There are methods you might think, but immediately reject automatically and prematurely (like asking for help, or bribing someone), try not to do that, but instead think of why you truly rejected that method, bring it to a coherent conscious thought. I've made my idle thought to think about what I am doing, what I want to do, how to optimize that; and found it useful.
Being good at math (like calculus, vectors, and what not) is useful as a programmer, but isn't that truly crucial. What, however, is crucial is the ability to reason systematically about your code and be right. You'll pick this up with practice. There is a similarity with math here, as you need to be rigorous, but you can also pick up short cuts where you can convince yourself of something complex by seeing a few patterns and knowing something follows (like if seeing x = 6y, you know y = x/6 immediately without doing all the steps to isolate y). Programming might improve the same thought processes in math, although experience does matter there too.
It's probably a good idea to also locate people that you think you can learn from, or can learn with, topics that you decide interest you. If this works, you can create some social pressures in the group that drive you all forward.
If you want to do osdev, you probably would do well getting to learn to do C programming well (do this on Unix, it's yuck on Windows). This might be hard. Starting to master something like Python is probably a good start, I think that's a decent language to learn and also useful as an experienced programmer. Every post will probably suggest something different. Don't be too quick to rule out their advise. But it's easier to pick technology when you have concrete goals. I would suggest some simpler goals so you can develop a flow where the challenges fit your skill and you have a positive feedback loop.
These are just some random thoughts based on my personal experience. I don't know your situation well enough to give you proper advise, so I gave some meta-advise to help you figure out what to do. You might have to read this post a couple times and not immediately reject all ideas. Or perhaps it doesn't apply to you.
Note that I'm not treating you as an intellectual inferior here. I get why you fear that reaction, and people might think that when seeing this topic and being unable to give any useful advise, but that's just them defaulting to victim blaming. It's definitely a problem on these forums, where someone posts a hopeless topic, and established members think of that person as hopeless. You're not doing that here. You are going one level higher and posting a meta question where you ask for help getting a coherent direction. That's a good thing.
Re: Hard to settle with a starting programming language
My issue is that I couldn't begin to brainstorm goals as far as programming projects go.
All I understand is:
Hello World > Simple Input > Some simple game > and so on.
After that, I'm afraid I might get lost. I can't imagine being able to think of a more complex design. For example, let's say as a general design idea, I wanted to code a geopolitical game, but I don't imagine at this point breaking down such a complex general goal into several sub-goals. My Asperger issue I was talking about earlier comes with goal setting and planning.
All I understand is:
Hello World > Simple Input > Some simple game > and so on.
After that, I'm afraid I might get lost. I can't imagine being able to think of a more complex design. For example, let's say as a general design idea, I wanted to code a geopolitical game, but I don't imagine at this point breaking down such a complex general goal into several sub-goals. My Asperger issue I was talking about earlier comes with goal setting and planning.
Re: Hard to settle with a starting programming language
Game programming isn't trivial, even command-line games, at least to the degree of hello world. I suggest you stop try to build anything large and just take general purpose programming lessons. Alternative, programming is not for you. If you like games, you can still try skills like level design in an existing engine. It's a bunch of work to learn such tools, too, like learning a photo editor, but it's a different kind of work/intelligence than programming. I personally enjoy creating digital worlds like that. Either way, perhaps an advanced operating system's development forum is not for you, at least not yet.
I wonder to what degree cognitive planning issues can be overcome by learning, designing and following some processes. Like writing down all you need to do, writing down how you prioritize stuff, and such. I try to do this and am bad at actually doing it, but I think it helps me if I followed through. But of course you can't reason about games programming and operating systems development on a detailed planning level, if you don't know the areas and have experience.
I wonder to what degree cognitive planning issues can be overcome by learning, designing and following some processes. Like writing down all you need to do, writing down how you prioritize stuff, and such. I try to do this and am bad at actually doing it, but I think it helps me if I followed through. But of course you can't reason about games programming and operating systems development on a detailed planning level, if you don't know the areas and have experience.
Re: Hard to settle with a starting programming language
What else than OSDev can I get the satisfaction of creating something entirely by myself, if not two or more team members working together. I just yearn for the days when memory and processing was measured in anything other than Gigahertz. Possibly, I can learn how to develop a mini shell and call it a little OS project, but I heard negative reaction from those before. I'd like to work with limited resources such as low color/audio resolutions.
And if I dare get to the point of OSDev, would the programming I experience on the way allow me to naturally pick up a high percentage of the required skill set for a project like that?
And if I dare get to the point of OSDev, would the programming I experience on the way allow me to naturally pick up a high percentage of the required skill set for a project like that?
Re: Hard to settle with a starting programming language
Are you sure then that programming is what you want?
I got interested in programming because I was curious about how computer games are made. It wasn't the gameplay that I was interested in, but the technical side of making games. Like, you can draw the game screen in BASIC, but it's too slow. So you learn some algorithmic tricks and things like lookup tables. But it's still slow and you get into assembly programming and learn how to implement what you need in efficient machine code as opposed to inefficient interpreted BASIC code. That's how I started. Then I expanded into other areas (3d computer graphics, OS dev, DSP, compilers), languages (Pascal, C/C++, etc) and architectures (8051, x86, MIPS).
You can also treat programming not as something that has an intrinsic value (e.g. the scientific part of it, math and algorithms) but as a tool that can help you achieve a specific goal. Do you have a problem that you think you could solve with software and for which you don't have the needed software (because it doesn't exist or is too expensive, etc)? It can be something as useless as a cool graphics demo that some (or maybe just you) might find pleasing to watch, as long as it's something you really want to create.
I don't think there's a good reason to get into programming if it doesn't interest you and you don't have a problem to solve with it. (I shouldn't probably say that making a living can be such a problem)
I got interested in programming because I was curious about how computer games are made. It wasn't the gameplay that I was interested in, but the technical side of making games. Like, you can draw the game screen in BASIC, but it's too slow. So you learn some algorithmic tricks and things like lookup tables. But it's still slow and you get into assembly programming and learn how to implement what you need in efficient machine code as opposed to inefficient interpreted BASIC code. That's how I started. Then I expanded into other areas (3d computer graphics, OS dev, DSP, compilers), languages (Pascal, C/C++, etc) and architectures (8051, x86, MIPS).
You can also treat programming not as something that has an intrinsic value (e.g. the scientific part of it, math and algorithms) but as a tool that can help you achieve a specific goal. Do you have a problem that you think you could solve with software and for which you don't have the needed software (because it doesn't exist or is too expensive, etc)? It can be something as useless as a cool graphics demo that some (or maybe just you) might find pleasing to watch, as long as it's something you really want to create.
I don't think there's a good reason to get into programming if it doesn't interest you and you don't have a problem to solve with it. (I shouldn't probably say that making a living can be such a problem)
-
- Member
- Posts: 96
- Joined: Sat Mar 15, 2014 3:49 pm
Re: Hard to settle with a starting programming language
I am truly sorry to hear about your condition. Autism is a spectrum, but the good news is that many find their strengths and expression in programming. I hope you find it rewarding too.
Writing an OS is two challenges: first, you must master programming a priori, and second it represents a continuous time sink. Hobby OS are a bit like people who recondition classic cars and enjoy taking years to do so.
When people say they "write games" as a hobby people think they mean from scratch. And there are those of us that do that occasionally, e.g. if you do Ludum Dare or other game jams.
But there is so many more opportunities to program games that are far more approachable and perhaps less frustrating! Which games do you enjoy playing? If you like video games, the chances are that one of those games you like playing has a scriptable AI (usually LUA) and you can tinker making the NPCs do your bidding...
Writing an OS is two challenges: first, you must master programming a priori, and second it represents a continuous time sink. Hobby OS are a bit like people who recondition classic cars and enjoy taking years to do so.
When people say they "write games" as a hobby people think they mean from scratch. And there are those of us that do that occasionally, e.g. if you do Ludum Dare or other game jams.
But there is so many more opportunities to program games that are far more approachable and perhaps less frustrating! Which games do you enjoy playing? If you like video games, the chances are that one of those games you like playing has a scriptable AI (usually LUA) and you can tinker making the NPCs do your bidding...
Re: Hard to settle with a starting programming language
I've always liked the concept of the SimCity games and The Sims. Both games are really frustrating to me though, and all I ever do is close and start over without really "completing" anything. I have too much of a perfectionist mindset.
Sure, I'd love it if some existing software on the market wasn't so expensive (there needs to be a cheaper or free solution to video effects and animation like Adobe After Effects somewhere), but that's so Advanced. The only way I can see is if by a team effort. As for OSDev, Besides Linux, I see no amount of anyone willing to work in a large team of developers, which is kind of a shame.
Sure, I'd love it if some existing software on the market wasn't so expensive (there needs to be a cheaper or free solution to video effects and animation like Adobe After Effects somewhere), but that's so Advanced. The only way I can see is if by a team effort. As for OSDev, Besides Linux, I see no amount of anyone willing to work in a large team of developers, which is kind of a shame.
-
- Member
- Posts: 1146
- Joined: Sat Mar 01, 2014 2:59 pm
Re: Hard to settle with a starting programming language
I have Asperger's too and personally I don't have any problem picking up new programming languages, but then aspies differ quite widely in their ability with these things.
I realise that you're keen to try web stuff, but apart from learning Java there isn't really anywhere to start there as a beginner, and I wouldn't recommend that you try to learn Java when you don't have much programming experience. I would normally recommed C to a beginner because it's used in a lot of different places and has a lot in common with other languages, but you might find it a little complicated to start with so I would like to recommend Visual Basic. I started programming with another somewhat outdated varient of BASIC but you're probably going to want something up-to-date so Visual Basic would establish those same beginning principles that I got from BASIC while at the same time giving you the enjoyment of working with something up-to-date and that allows you to create Windows GUI applications quickly and easily. But once you're comfortable with Visual Basic then you should try learning C (don't waste your time with Visual C++).
However if you're a Linux user like me then although there are Visual Basic compilers for Linux they aren't very good especially not for a beginner so I would probably say that you should either use a Windows system for your programming at first (if you have a Windows system, that is) or try learning C. C's not that hard really, just harder than Visual Basic. You should manage with it, and it's a good language to know. There are plenty of beginner guides to C on the internet (although some are of poor quality) and experimentation rather than following a set learning procedure is, I have found, the best way to learn something.
I realise that you're keen to try web stuff, but apart from learning Java there isn't really anywhere to start there as a beginner, and I wouldn't recommend that you try to learn Java when you don't have much programming experience. I would normally recommed C to a beginner because it's used in a lot of different places and has a lot in common with other languages, but you might find it a little complicated to start with so I would like to recommend Visual Basic. I started programming with another somewhat outdated varient of BASIC but you're probably going to want something up-to-date so Visual Basic would establish those same beginning principles that I got from BASIC while at the same time giving you the enjoyment of working with something up-to-date and that allows you to create Windows GUI applications quickly and easily. But once you're comfortable with Visual Basic then you should try learning C (don't waste your time with Visual C++).
However if you're a Linux user like me then although there are Visual Basic compilers for Linux they aren't very good especially not for a beginner so I would probably say that you should either use a Windows system for your programming at first (if you have a Windows system, that is) or try learning C. C's not that hard really, just harder than Visual Basic. You should manage with it, and it's a good language to know. There are plenty of beginner guides to C on the internet (although some are of poor quality) and experimentation rather than following a set learning procedure is, I have found, the best way to learn something.
When you start writing an OS you do the minimum possible to get the x86 processor in a usable state, then you try to get as far away from it as possible.
Syntax checkup:
Wrong: OS's, IRQ's, zero'ing
Right: OSes, IRQs, zeroing
Syntax checkup:
Wrong: OS's, IRQ's, zero'ing
Right: OSes, IRQs, zeroing
Re: Hard to settle with a starting programming language
Visual Basic is sounding pretty awesome. I'll gladly ask for tips when you can. Then I can learn C. But who says I should stop at C? I may even pick up the more modern C++,since I see is use as a all-purpose language in popular programs like Firefox or something. This is going to be a fantastic experience.
And another thing to clear up: there are primitive data types in VB. The integer type "int" is 32-bit, "long" is 64-bit right? I just installed and messed around to YouTube tutorials yesterday.
And another thing to clear up: there are primitive data types in VB. The integer type "int" is 32-bit, "long" is 64-bit right? I just installed and messed around to YouTube tutorials yesterday.
Re: Hard to settle with a starting programming language
Now I can't wait to learn C.
- AndrewAPrice
- Member
- Posts: 2299
- Joined: Mon Jun 05, 2006 11:00 pm
- Location: USA (and Australia)
Re: Hard to settle with a starting programming language
I always found it helped to have a reason for doing stuff. If you want to learn C, set yourself some goals. E.g. Try to make a calculator program that you can type in "1+2" and it splits the strings by + - / * and calculate each number. It's something simple that doesn't require a lot of planning, but it'll force you to learn how to use loops and deal with strings.
My OS is Perception.
Re: Hard to settle with a starting programming language
I am back. I'm still struggling to choose a first language. There is just so many contradicting opinions of how to start programming, and I might just not be a very logical thinker.
I hope I'm not too unrealistic. I do want to understand low-level works and OSDev someday. Maybe I'm trying to force it too much?
I hope I'm not too unrealistic. I do want to understand low-level works and OSDev someday. Maybe I'm trying to force it too much?
Re: Hard to settle with a starting programming language
You can always self-host (google LAMP bundle). I know a site or two (including the one I use to host my OS' website) which provide free hosting.SeanMc wrote:Maybe web or app making, but a host will cost a fee, something I'm not ready for yet.
As far as language is concerned, start with something graphical and visual. What about C# or Small Basic? Or JQuery with HTML/CSS?
P.S. I'm just curious to know, what's your occupation?
P.P.S. I created a simple demo in JavaScript; it might be useful to you: