A little background. My academic area has nothing to do with computer programming etc Razz I want to learn it only because I want to.
Anyways, I have decided that I will start from C# as I’ve read its very well used language which can be used to make powerful apps. Moreover, it should be quite similar to most other languages. And another big plus point is that one code can be used for PC and windows phone and (after some slight modifications) on android as well.
I want to ask all you experts, am I making a correct decision? I read somewhere and the guy said that don’t start from C# but start learning from some other simpler language (C, VB etc). What should I do?
And I plan to start learning by watching the beginners videos by Microsoft. Do you suggest any other source to learn? And i wont have any teacher. I would be totally “self-school”
keeping all this in mind, should I start C#?
C# code won’t run on Android with slightly modification. It will run only with a total rewriting in Java.
C# is a mature and a well designed language. As long as you will use your head in the right way, you can start with all the languages you want. Programming is about building the right mindset to understand and reshape a problem. Once you get the right mental tools, you can switch languages with easiness.
Video tutorial are not a good choice generally. Books and real programming will help you a lot more and C# is popular enough to have many good books.
In this link there are many free books.
Is not too important the language that you start with as long as you build the right thought pattern. C# is a language that can shape your thought in the right way. C will force you to think like a programmer more but if you are not stupid you can do it with C# too. In order to be a competent programmer you also need to know some things not found in C# like memory management and accomplish programming without extensive pre-made libraries. C will push you straight in this situation and this is one of the reasons it is generally suggested. C is also simpler in terms of language complexity and has a very limited library compared to C#, Java etc. etc.
To learn programming, choose a good book and once you have enough concepts to use immediately start to program. Don’t make the error of reading 2-3 books and then start to program because you will have forgotten the books if you won’t have applied what you read. Books are an helping hand to get you to program, the right way of doing it is to try the best as you can to apply what you read in real world situations.
i have another question. how should I learn programming? I mean do i read the book in sequence and when I arrive at a new command etc, I test it by writing the code myself?
Or do I try to make a program and then consult some parts of the books to achieve what I have planned in my mind?
GUI coding, for the beginners, can be a source of confusion. GUI programming, especially for beginners, has the drawback of distracting you from the programming logic. Usually people, first start grasping the programming logic and only after this they jump on the language’s peculiarities. If you plan to program both console and graphical applications you won’t have problems and this would greatly aid you. Console applications let you focus more on the programming logic. I’m not like my colleagues that strictly forbid learners to do graphical programming the first times . I consider that programming too. The only problem I see is that it can be overwhelming at first, because you will have a lot of unanswered questions and you will use a lot of things without knowing how they work and why. If you plan getting serious about programming, you have to learn GUI programming too. Try to balance your learning. Focus especially on what you want to master and try to give enough room for other concepts: like database programming, GUI etc. etc.
C# is capable of writing graphical apps. Without using 3rd party tools/addons, GUI programming depends on the OS and the means it offers to create graphical applications. You adventure in a part of programming in which there are more rules and obligations than logic and this is one of the reason someone discourage to do GUI programming at first. One of the crucial abilities of programmers is the capacity to use what it’s offered and to be a programmer you must know how to do GUI programming. In my opinion you should try both type of programming.
You don’t need to keep yourself away from GUI programming but remember that understanding the programming logic is more important than mastering the GUI frameworks in the overall. You can do both in my opinion, just balance the learning to give more room to the programming concepts regarding the logic of software.
I have a lot of doubts about your affirmation. You have more complex concepts to worry about, especially when c/c++ haven’t got garbage collector, this means that you have to destroy all your created objects, if you don’t, they will live up to the end of the program (The memory is not released). This means that C# or Java are in a higher abstract level than c/c++.
Apart of that, there isn’t a good IDE for c/c++ (you can’t compare Visual Studio + C# against anything using c/c++).
in my opinion, the order by difficulty would be java or c# (they are very similar) and then c/c++
learning c# without any previous languages and all that they encapsulate is like trying to learn MMA without knowing striking, wrestling..
yes it can be done(nothing is impossible) but you are throwing yourself into the deep end and hoping to swim with sharks , your better off starting with c and working your way up, because all of the principals found in c# and java are a stepping stone coming from c and c++
its like going straight to quantum physics by skipping physics.
you really shouldn’t be handicapping yourself and confusing yourself and making it really difficult for yourself by going to c# because you will quickly become confused and lost and probably give up before going forward.
your saying skip memory management etc and go straight to c# is just absurd, because the point is not about learning memory management but rather to get an intuitive feel of how programs work and run which you will later on use in your own programs
where is this person supposed to get the ideas of how to write programs? how can they get a feel for functions and methods etc and how to use them appropriately and resourcefully without understanding how memory management works?
because if you think that a person is supposed to just instantly develop thinking in OOP terms without any previous background in languages which deal with simpler concepts, you are greatly mistaken and would make a terrible advisor or teacher for anyone trying to get any advice on the subject of computer science
your not just dealing with programming languages your deal with with computer science principals and fundamentals
if this guy doesn’t understand what pointers are and how they work, he wont have the foundations to be able to utilize methods in their own programs , especially if they dont have an engineering background
A programmer must have a flexible mind ready to tackle the designing problems. If you are good at programming, you have the right mindset to interact and use the programming environment. Pointers and memory management are an aspect of programming and if you are a good programmer and you make the right questions and decisions you will use it in the right way even if you have not intensively studied them. At first you won’t be able to use tricks acquired with experience but you will still use them efficiently. 100 programming aspects don’t need 100 different mindsets. It’s, instead, the right approach used in different situations. Only the bad programmer would learn everything and use memory; the good programmer would do this:
I never used the pointers, so how can I proceed?
By making the right questions you will develop a general understanding that will be useful for all the programming tasks. Everyday there is something new, knowing all of everything is impossible. It’s far better to know the general solution to everything: the mindset that gives you the tools to correctly solve a new problem. A programmer that knows only old solutions is far less valuable than someone who can invent.
Firstly that is not even a question that is revolved around programming knowledge it doesn’t even use complex methods but rather very basic fundamentals in programming you could write that in python or c using probably only pointers , functions and variables , it doesn’t take streams, it doesn’t output to files , writing it as a class would be overkill.
that kind of programming question is more mathematical than anything else and really i cant be bothered to do the mathematics of it as i have actual work to do and don’t have time to fly around like you, even somebody who has never once touched a programming language could write that in pseudo code.
I really suspect that your the one who has no idea about programming since you posed that question and mentioned that it is used in a test.
start with c++ because languages like c# and java kinda do everything for you. Which is really nice when you are really knowledgeable and just want to get stuff done, but if you use these languages that allow you to make things faster you won’t learn what’s really happening in your computer and you will get really confused later on, you’ll start thinking coding is all like
EmailClient client = new EmailClient();
. Maybe what you could try , and maybe this might hurt more than it helps is Learn a language like c++ first and do small projects to get the hang of it to learn about things like memory and pointers but at the same time if you have a real project you want to tackle move to c# and do it in that. That way you’ll build up confidence and also learn the really low level (as in close to the hardware level) stuff otherwise if you stick to c and c++ as a beginner you won’t get much done for a long time. One thing you must do is TEST TEST TEST, test code you find play around with it, that is one big mistake I made when starting is I would read code and understand it but I didn’t play around with it to really understand it well. I think C# is very good but I haven’t used it much. It has the lower level stuff like pointers and even inline assembly but it also has the more abstract stuff that java has and they are even talking about making .net multi-platform which means mac and Linux will be able to use it. One complaint, you have to type access modifiers (public,private,protected) on every bloody variable it seems redundant and stupid. Also make sure you know what the .net language is https://en.wikipedia.org/wiki/.NET_Framework#Architecture.
hint: the c# code you type gets turned into a common language that multiple languages share (vb,c#,f#) all get turned into this language which you don’t see , and then they get turned into something your computers processor knows how to use(assembly language).
Message me or post here if you don’t understand certain terminology. That is one of the hardest things when starting, the terminology. It will confuse you because there’s so many terms that have several different meanings in computers and in real life.
You should remember that not every programmer will need that low-level knowledge right away. If you just want to learn programming – almost any language will do. Go ahead and start with Python if you like it, you’ll have a boon of interactive interpreter. Want to maybe dabble with server-side stuff and hear that PHP is the way? Go ahead and start with PHP (it’s… not that awesome, but very popular and definitely usable). You think C# smells nice? Use that.
I don’t see why learning manual memory management (because that’s basically where it gets down to, pointers and manual memory management) is necessary for this, and if that’s what you want to push down beginner’s throat, then just throw C at them. Make them build their own string facility.
Honestly, it’s good to learn the low level stuff if only to be aware what the standard facilities of this or that language do behind the scenes, however, I’d risk saying it’s better, or at least – not worse – to do it after you get a grip with the whole concept of the computer running some very explicit, specific instructions, to solve some problem. I think at least for people that aren’t interested in low level stuff – it will obscure what is the most important, learning – generally understood – programming.
It’s fine if you want to start your programming journey with C or C++, the learning curve might be steeper, but you’ll make it just as well. However, that’s definitely not the only way to do it. I don’t see why Python or C# would not be a good choice for a starting language. At the beginning the language used isn’t all that important.
i am not going to do that because i am busy with my own work and don’t have time to prove to you that i know how to program
If you study mathematics and you skip algebra, or calculus and you try to learn polynomials or trigonometry , YES it can be done, but it will be unnecessary difficult and stupid to approach it that way , you might not realize it but subconsciously you are employing the skills you developed in algebra and calculus to work with trigonometry and intuitively you are using or learning trigonometry etc and you can apply this to any other topic just remove the topics i mentioned and put x,y b and the sentence still makes sense
same thing with programming
you learn memory management which later on you don’t realize but intuitively you use what you learned during the time when you worked with memory management
its basically compounding knowledge , you cannot learn to run without walking first , or what will happen is that you wont realize it but you will be learning to walk while you are trying to run
THAT’S my point
and for your information my work is orientated on opengl ,c++, GLFW, box2d, android i am developing games at the moment so therefore memory management is very imperative to my work i.e buffers objects etc