Jump to content

Best language for a begginer?

spellmanuk
12 hours ago, JoostinOnline said:

You don't start with the hardest language and move backwards.  You learn something simple to get the basic concepts of logic.

Worked for me. Took me a half hour to learn the concepts of different levels of memory, registers, and the basic commands. Life was rather easy afterwards, especially in higher level languages.

 

For those who are capable, working backwards is great.

i7 6700K @ Stock (Yes I know) ~~~ Corsair H80i GT ~~~ GIGABYTE G1 Gaming Z170X Gaming 7 ~~~ G. Skill Ripjaws V 2x8GB DDR4-2800 ~~~ EVGA ACX 3.0 GTX 1080 SC @ 2GHz ~~~ EVGA P2 850W 80+ Platinum ~~~ Samsung 850 EVO 500GB ~~~ Crucial MX200 250GB ~~~ Crucial M500 240GB ~~~ Phanteks Enthoo Luxe

Link to comment
Share on other sites

Link to post
Share on other sites

On 2017-04-03 at 9:56 AM, Dat Guy said:

Woo-hoo, my favorite topic!

 

Here's a number of (unsorted) recommendations for a beginner:

 

1. Start with Common Lisp!

 

Pros: Common Lisp, being a very mature language (first standardized in the 1980s), is quite unlikely to get major API breakages anytime soon, i.e. you won't have to adapt new language features every few years. It is basically an "executable lambda calculus", so it includes a lot of the shiny lambda and closure features other languages are still missing. The REPL allows you to gradually extend code which is currently running (i.e. modify your applications while using them). There are great and free books for it, e.g. Practical Common Lisp and Wikibooks. Paul Graham said that learning and using Lisp will make you a better programmer.

 

Similar to Python, Perl and other popular languages, there is a shitload of libraries you can just include and use. The language ecosystem is, despite of its age, alive and kicking. SLIME is probably the world's greatest IDE for any language. Performance-wise, certain Lisp implementations can even be faster than C. Code examples: See rosettacode.org.

 

Cons: Due to Lisp's unique approach, it will be hard for you to adapt any Lisp knowledge to non-Lisp languages. Don't worry, there are a lot of other Lisp languages, e.g. Clojure and Scheme. You can even script certain GNU applications like Emacs and The GIMP in a Lisp language. C-like languages are an entirely different thing though.

I'd suggest going with something like Racket instead. It's a language in the Scheme/Lisp family, but was created by MIT specifically as a teaching language--it allows the programmer to set the difficulty level of the language, which obfuscates some of the language features which are less-needed at the beginning (as well as make some things easier to understand, for example by providing a true and false key word in the Beginning Student setting, then #t and #f symbols in Intermediate Student, and finally anything non-#f is true in full Racket). 

Best way to learn it is to follow along MIT's textbook, How To Design Programs, which provides a great introduction to programming (covering basic algorithms and an in-depth documentation and design process). 

Quote

3. Start with C!

 

Pros: C is everywhere. If your computer has an operating system, it (most likely) also has a C compiler, even on niche systems like RISC OS and Plan 9. Due to this fact, C has a library for anything, it can even be a great choice for web applications. As C's language core is often called a portable assembler, C code is usually translated to very efficient machine code, making your code do exactly what you expect it to without too much fiddling from your compiler or linker.

 

Cons: The learning curve of C is actually a vertical line. :) Seriously, C is not your friendly beginner's language, it basically punishes you for even the smallest mistakes. This could as well be a positive aspect though, you will learn to avoid sloppy coding. If you are afraid to jump into cold water, you might start with C++ instead, C++'s current revision C++17 is rather beginner-friendly and (almost) every valid C program is also a valid C++ program, so you are able to slowly turn your C++ code into C code while you learn the differences.

 

Concerning Python: Please don't use Python. It is a horrible language, teaching you a horrible coding style.

C is actually the second language that is taught at my university to first year students, but I wouldn't suggest it as a starter language. They start us on Racket (first semester), then C (second semester), and then C++ (third semester). It's quite effective as it gives students exposure to all three major paradigms. 

Python is taught to the non-CS students who want to take a CS elective... There is something to be said about the language if you do not aspire to completely delve into CS (it is fairly prominent in scientific computing and statistics, especially with all the support it's now receiving). 

On 2017-04-04 at 4:13 AM, peej said:

whatever you say dear

I wouldn't suggest being condensing to someone, especially not when they are correct. HTML and CSS will not give you any transferable skills to programming, it simply is a fact. HTML and CSS are both markup languages (although technically CSS is Turing complete, but for all intends and purposes it is not a programming language). If you want to look on the web development side, JavaScript is a front-end programming language, but it is not one which I would suggest someone take as a first, especially if they seek a deeper understanding of programming. 

On 2017-04-04 at 9:58 AM, Noirgheos said:

-snip-

This is a terrible idea. Assembly will not enable someone to easily or effectively learn data structures, algorithms, or anything else 'essential' to programming. Sure, you might have a great understanding of how everything works with memory behind the scenes, but the reality is that this knowledge is almost completely useless for the majority of programmers (especially beginners). Your suggestion is akin to teaching someone chemical engineering before teaching them to build a car--just so that they have in-depth knowledge in how the chemical process of a combustion engine works. 

I know of not a single university (albeit, my anecdotal experience is limited to some North American and some European schools, mostly through talking to people at hackathons) which teaches their CS or SE students assembly as their first language--surely if it was such a great idea at least a single one would do so? 

On 2017-04-04 at 10:46 AM, Dat Guy said:

Choosing an abstract language as the first one will raise the bar for C, ASM et al. as it's harder to learn a different concept than the first concept. You can't transfer anything you know from e.g. Python to C (except "there is a main function").

Disagree, you can transfer the knowledge of data structures, algorithms etc, from Python to C. The basic concepts behind the way your code work transcends languages, but I do agree that the ease in which you can transfer it will vary. If you learn to properly code in C (and yes, this is an if, even C allows you to create poorly design, optimized, or implemented code), you will have a very easy time transferring to another language.

15" MBP TB

AMD 5800X | Gigabyte Aorus Master | EVGA 2060 KO Ultra | Define 7 || Blade Server: Intel 3570k | GD65 | Corsair C70 | 13TB

Link to comment
Share on other sites

Link to post
Share on other sites

I guess I should just ask, what do you want to do?

If it's web development than what framework do you prefer? If it's Rails go Ruby, Django go Python, and PHP has several frameworks to choose from.

If you like C# ASP.net is also fine. 

 

If you're into game development C# and C/C++ are the way to go, javascript may be easier for scripting but I found C# to be easier personally.  

 

I'm Batman!

Steam: Rukiri89 | uPlay: Rukiri89 | Origin: XxRukiriXx | Xbox LIVE: XxRUKIRIxX89 | PSN: Ericks1989 | Nintendo Network ID: Rukiri

Project Xenos: Motherboard: MSI Z170a M9 ACK | CPU: i7 6700k | Ram: G.Skil TridentZ 16GB 3000mhz | PSU: EVGA SuperNova 850w G2 | Case: Caselabs SMA8 | Cooling: Custom Loop | Still in progress 

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, Blade of Grass said:

I'd suggest going with something like Racket instead. It's a language in the Scheme/Lisp family, but was created by MIT specifically as a teaching language--it allows the programmer to set the difficulty level of the language, which obfuscates some of the language features which are less-needed at the beginning (as well as make some things easier to understand, for example by providing a true and false key word in the Beginning Student setting, then #t and #f symbols in Intermediate Student, and finally anything non-#f is true in full Racket). 

Best way to learn it is to follow along MIT's textbook, How To Design Programs, which provides a great introduction to programming (covering basic algorithms and an in-depth documentation and design process). 

C is actually the second language that is taught at my university to first year students, but I wouldn't suggest it as a starter language. They start us on Racket (first semester), then C (second semester), and then C++ (third semester). It's quite effective as it gives students exposure to all three major paradigms. 

Python is taught to the non-CS students who want to take a CS elective... There is something to be said about the language if you do not aspire to completely delve into CS (it is fairly prominent in scientific computing and statistics, especially with all the support it's now receiving). 

I wouldn't suggest being condensing to someone, especially not when they are correct. HTML and CSS will not give you any transferable skills to programming, it simply is a fact. HTML and CSS are both markup languages (although technically CSS is Turing complete, but for all intends and purposes it is not a programming language). If you want to look on the web development side, JavaScript is a front-end programming language, but it is not one which I would suggest someone take as a first, especially if they seek a deeper understanding of programming. 

This is a terrible idea. Assembly will not enable someone to easily or effectively learn data structures, algorithms, or anything else 'essential' to programming. Sure, you might have a great understanding of how everything works with memory behind the scenes, but the reality is that this knowledge is almost completely useless for the majority of programmers (especially beginners). You suggestion is akin to teaching someone chemical engineering before teaching them to build a car--just so that they have in-depth knowledge in how the chemical process of a combustion engine works. 

I know of not a single university (albeit, my anecdotal experience is limited to some North American and some European schools, mostly through talking to people at hackathons) which teaches their CS or SE students assembly as their first language--surely if it was such a great idea at least a single one would do so? 

Disagree, you can transfer the knowledge of data structures, algorithms etc, from Python to C. The basic concepts behind the way your code work transcends languages, but I do agree that the ease in which you can transfer it will vary. If you learn to properly code in C (and yes, this is an if, even C allows you to great poorly design, optimized, or implemented code), you will have a very easy time transferring to another language.

Sorry to quote all of it, but - 

 

My CEGEP (Quebec equivalent of college), does what I suggested. Teach flowcharting first (using Raptor), then go straight to ASMx86, and then C and its variants. Then again, its a computer engineering program. We also do logic and electrical circuits, so our knowledge is used more often with the hardware itself. 87% of graduates are hired within two months of completing the program. Seems to be working well enough.

 

Also, since we do ASM with VS, we also mix some C with it, in turn letting us do Procs and algorithms. Those certainly come in useful later on, and largely helps make learning C a joke to the majority of our students.

i7 6700K @ Stock (Yes I know) ~~~ Corsair H80i GT ~~~ GIGABYTE G1 Gaming Z170X Gaming 7 ~~~ G. Skill Ripjaws V 2x8GB DDR4-2800 ~~~ EVGA ACX 3.0 GTX 1080 SC @ 2GHz ~~~ EVGA P2 850W 80+ Platinum ~~~ Samsung 850 EVO 500GB ~~~ Crucial MX200 250GB ~~~ Crucial M500 240GB ~~~ Phanteks Enthoo Luxe

Link to comment
Share on other sites

Link to post
Share on other sites

46 minutes ago, Noirgheos said:

Sorry to quote all of it, but - 

 

My CEGEP (Quebec equivalent of college), does what I suggested. Teach flowcharting first (using Raptor), then go straight to ASMx86, and then C and its variants. Then again, its a computer engineering program. We also do logic and electrical circuits, so our knowledge is used more often with the hardware itself. 87% of graduates are hired within two months of completing the program. Seems to be working well enough.

 

Also, since we do ASM with VS, we also mix some C with it, in turn letting us do Procs and algorithms. Those certainly come in useful later on, and largely helps make learning C a joke to the majority of our students.

That's fair, but as I said, I know of no computer science or software engineering programs which do so. The reality is that the focus of computer engineering is not teaching the theories of computing (data structures, algorithms, or etc), but instead on the physical aspects of computing/how they work and it's relation to low level programming (which I expect is a rather cursory introduction to programming?). It's entirely fair--if he wants to go into hardware--for him to learn assembly. But if he wants to become some sort of software developer (which is what I assume given what he's said in this thread), it is a poor decision. 

15" MBP TB

AMD 5800X | Gigabyte Aorus Master | EVGA 2060 KO Ultra | Define 7 || Blade Server: Intel 3570k | GD65 | Corsair C70 | 13TB

Link to comment
Share on other sites

Link to post
Share on other sites

  • 2 weeks later...
On 4/3/2017 at 7:33 AM, peej said:

hey,

 

sorry, this is a really boring and generic question I know but I wanted to know what the best language to learn for a novice programmer?

 

I know a tiny tiny tiny tiny tiny tiny amount of HMTL so little, in fact, idek why I'm mentioning it, however, I wanted to know what the best one was to learn and by the best one I'm talking about learning soothing because it's the easiest one to learn I'm thinking more which ones are the most useful and relevant, something that has a broad usage since I'm not looking to learn for any reason in particular. 

 

Again, sorry for the super boring generic question and thanks in advance

The "best" language is the one that is used to program what your working on. Even then there is no "Best". It's actually a really great question but first ask yourself "What do i want to program?". Once you know that start researching languages. Generally speaking programming languages are like spoken languages, you might learn JavaScript but what you should be taking away is how to use OOP languages as the same principals apply to thing like c#. Or you can learn python and apply the same thought patterns to say vbscript for example. Once you find out what your into and what you like find a style you like and eventually your going to settle into a language. Asking what the is best language is unfortunately kind of like asking what is the best chair. Its really dependent on your preference. Learning to program takes time and patience, just keep at it :-)

 

Best of luck!

"Talk is cheap. Show me the code."

Link to comment
Share on other sites

Link to post
Share on other sites

On 04/04/2017 at 8:30 AM, Dat Guy said:

please don't use Python

What a stupid thing to say. Python is just as valid as any other language. 

 

On 04/04/2017 at 4:09 PM, Dat Guy said:

Why not? It has all the advantages of Python (even some of Go's) without its disadvantages. 

Due to the lack of real world usage, I would assume.

                     ¸„»°'´¸„»°'´ Vorticalbox `'°«„¸`'°«„¸
`'°«„¸¸„»°'´¸„»°'´`'°«„¸Scientia Potentia est  ¸„»°'´`'°«„¸`'°«„¸¸„»°'´

Link to comment
Share on other sites

Link to post
Share on other sites

6 minutes ago, vorticalbox said:

What a stupid thing to say. Python is just as valid as any other language. 

 

Yes, it is. Also, it is just as invalid as any other badly designed language.

 

6 minutes ago, vorticalbox said:

Due to the lack of real world usage, I would assume.

 

Any currently implemented language has real-world usage.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

34 minutes ago, Dat Guy said:

 

Yes, it is. Also, it is just as invalid as any other badly designed language.

 

Python has plenty of use case and is not only a valid suggestion is a semantically easy language to pickup. Lets not be crappy over preference lol. I personally would suggest vbscript over python but that doesn't make either suggestion more or less correct.

"Talk is cheap. Show me the code."

Link to comment
Share on other sites

Link to post
Share on other sites

4 minutes ago, LegionOfOne said:

Python has plenty of use case and is not only a valid suggestion is a semantically easy language to pickup.

 

All languages I know have plenty of use cases and are semantically easy languages to pick up. Some of them are just easier to adapt.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

47 minutes ago, Dat Guy said:

 

Yes, it is. Also, it is just as invalid as any other badly designed language.

 

 

Any currently implemented language has real-world usage.

python might be "badly designed" but for thing like web scraping and data analysis its very good, php is badly designed too and that's used basically everywhere. @SSL would love to tell us all about. 

 

by real world I meant jobs, I was taught visual basic while at college and uni which is almost never used in the job market. 

                     ¸„»°'´¸„»°'´ Vorticalbox `'°«„¸`'°«„¸
`'°«„¸¸„»°'´¸„»°'´`'°«„¸Scientia Potentia est  ¸„»°'´`'°«„¸`'°«„¸¸„»°'´

Link to comment
Share on other sites

Link to post
Share on other sites

Just now, vorticalbox said:

python might be "badly designed" but for thing like web scraping and data analysis its very good

 

Which single language is not good for "things like web scraping and data analysis" and why?

 

Just now, vorticalbox said:

by real world I meant jobs

 

That's not quite the same thing. There are very high-paid jobs for COBOL though...

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

Just now, Dat Guy said:

 

All languages I know have plenty of use cases and are semantically easy languages to pick up. Some of them are just easier to adapt.

While I am unfamiliar with all the languages you personally know I would very much disagree that all the languages that I know are semantically easy, that is to say that some languages are conceptually harder for a newer programmer to get into. Then again either way  think we can agree that it really is more of a opinionated stance based on preference. Me? I LOVE to teach, code in, and simply be around JavaScript. Based on your signature I would perhaps assume you feel similar about C. My point is that python, like vb, kinda reads like English and in my humble opinion python isn't a bad suggestion. I think we agree it's perhaps not the best, but I defend that doesn't make it bad either.

"Talk is cheap. Show me the code."

Link to comment
Share on other sites

Link to post
Share on other sites

6 minutes ago, LegionOfOne said:

I would very much disagree that all the languages that I know are semantically easy

 

Your perception of the semantical easyness of a language entirely depends on your ability to pick up certain patterns, not on the language. Absurd but true example: If your first language was APL, you'll be fluent in APL.

 

Quote

we can agree that it really is more of a opinionated stance based on preference.

 

True.

 

Quote

Based on your signature I would perhaps assume you feel similar about C.

 

I (mostly) hate to teach, depending on who asks me to. :) But I randomly help people around me to get started with programming. We usually agree on Perl though.

edit for clarification: I feel comfortable in a number of languages, but I found C to be a pretty good all-round language which is nice to work with. Of course there are things I'd rather write in other languages.

 

Quote

My point is that python, like vb, kinda reads like English

 

Which language does not kinda read like English? In fact, you're actually arguing for COBOL now ... :D 

 

Quote

I think we agree it's perhaps not the best, but I defend that doesn't make it bad either.

 

Of course that's a matter of preference. IMO it mostly lacks brackets, a good compiler and adequate performance.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

2 minutes ago, vorticalbox said:

python might be "badly designed" but for thing like web scraping and data analysis its very good, php is badly designed too and that's used basically everywhere. @SSL would love to tell us all about. 

 

by real world I meant jobs, I was taught visual basic while at college and uni which is almost never used in the job market. 

This ^^

Everything had good and bad parts, I could make the argument for using r for data analysis but the fact remains the BEST language is the one that your willing to put the time into mastering. IMO python is a great learning language and its powerful enough to be much more than that.

 

@vorticalbox, well said! :-)

"Talk is cheap. Show me the code."

Link to comment
Share on other sites

Link to post
Share on other sites

1 minute ago, Dat Guy said:

 

Your perception of the semantical easyness of a language entirely depends on your ability to pick up certain patterns, not on the language. Absurd but true example: If your first language was APL, you'll be fluent in APL.

 

 

True.

 

 

I hate to teach. :) But I randomly help people around me to get started with programming. We usually agree on Perl though.

 

 

Which language does not kinda read like English? In fact, you're actually arguing for COBOL now ... :D 

 

 

Of course that's a matter of preference. IMO it mostly lacks brackets, a good compiler and adequate performance.

Ha! On the brackets thing, god yes haha. That is my least favorite part about py. This is why I love chatting with programmers there is almost always a sense of humor about it as almost everything is more opinionated haha. I have to agree with you in that once you understand a languages real purpose and the methodology that governs its usage they are really mostly the same and easy to some degree or another, what really differentiates each one really does become the actually perks/flaws of the language itself. Very valid point :-)

"Talk is cheap. Show me the code."

Link to comment
Share on other sites

Link to post
Share on other sites

Yes: "It's different than what I know, it must be bad!"

 

I call it "the Rust phenomenon". :D 

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/3/2017 at 6:56 AM, Dat Guy said:

Please don't use Python. It is a horrible language, teaching you a horrible coding style.

 

Care to elaborate? What "horrible coding style" are we talking about here?

Link to comment
Share on other sites

Link to post
Share on other sites

No brackets (= no easy refactoring), whitespace as syntax instead of legibility, mandatory try..catch instead of clean coding without too many exceptions.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, SSL said:

 

Care to elaborate? What "horrible coding style" are we talking about here?

My biggest problem with Python is when I try to read and understand other people's code. You can literaly read a program in Python where you have 0 clue what it does, because you don't know what datatypes it is supposed to handle. In a language like Java you can look at a method's parameters and name, and explain what it does (assuming the guy that wrote the code has a clue of what he is doing). 

SInce there is no need to specify the datatypes in Python, it is a mess when you want to look at methods and understand what they do. 

Running Arch with i3-gaps on a Thinkpad X1 Extreme
Data Science Postgrad

 

Link to comment
Share on other sites

Link to post
Share on other sites

38 minutes ago, Claryn said:

My biggest problem with Python is when I try to read and understand other people's code. You can literaly read a program in Python where you have 0 clue what it does, because you don't know what datatypes it is supposed to handle. In a language like Java you can look at a method's parameters and name, and explain what it does (assuming the guy that wrote the code has a clue of what he is doing). 

SInce there is no need to specify the datatypes in Python, it is a mess when you want to look at methods and understand what they do. 

 

That's an argument against weakly typed languages, though. Not Python in particular.

 

I agree that strong typing is the right way to do things, but I'd say code comprehension is a minor reason. Variable naming and documentation are much more important. Knowing the explicit type of a variable is going to tell you fuck all about what a piece of code does if it lacks good variables names, good documentation, or is just a mess regardless.

 

Really, the whole qualification "assuming the guy that wrote the code has a clue of what he is doing" also fails as an indictment of Python, since any piece of code in any language can be unintelligible if the person who wrote it is careless or incompetent.

 

If a method/procedure/function has a single responsibility (which it should if "the guy that wrote the code has a clue of what he is doing"), and follows conventions like good variable names and good documentation, it should be possible to understand it regardless of what language it is in. If you still can't figure it out easily just because of weak typing, that's your problem.

Link to comment
Share on other sites

Link to post
Share on other sites

On 4/8/2017 at 5:02 PM, Blade of Grass said:

I wouldn't suggest being condensing to someone, especially not when they are correct. HTML and CSS will not give you any transferable skills to programming, it simply is a fact.

 

Not at all. HTML combined with CSS falls under a declarative programming model, where the programmer specifies the what but not the how. It can teach a great deal about programming best practices, such as observing good organization, good documentation, good naming conventions, the DRY principle, etc. And that's without using a CSS preprocessor.

 

And no, HTML and CSS will not be useful when it comes to instruction in data structures or algorithms, but to say that they have no transferable skills to programming is a pretty interesting decision.

 

Generally, if you find yourself saying anything like "it simply is a fact" you should stop and make sure you're not being patronizing. Or, wrong.

Link to comment
Share on other sites

Link to post
Share on other sites

33 minutes ago, SSL said:

I agree that strong typing is the right way to do things, but I'd say code comprehension is a minor reason. Variable naming and documentation are much more important. Knowing the explicit type of a variable is going to tell you fuck all about what a piece of code does if it lacks good variables names, good documentation, or is just a mess regardless.

This. This. And did I mention this?

 

I mean what's more readable and understandable?

int val

Or

var file_size

All the first one tells me is it's an integer (and even then, is it 16-bit or 32-bit?). It doesn't tell me anything else. The second one tells me what the variable is supposed to do and I can make reasonable assumptions from there.

 

This reminds me of a piece of software I looked at where I was 5 levels deep in function calls, and they all returned "retval." It lost its meaning by the fourth function call and I had no idea what the hell I was trying to track.

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, SSL said:

 

That's an argument against weakly typed languages, though. Not Python in particular.

 

I agree that strong typing is the right way to do things, but I'd say code comprehension is a minor reason. Variable naming and documentation are much more important. Knowing the explicit type of a variable is going to tell you fuck all about what a piece of code does if it lacks good variables names, good documentation, or is just a mess regardless.

Python is strongly typed though. Are you thinking of statically typed?

1474412270.2748842

Link to comment
Share on other sites

Link to post
Share on other sites

51 minutes ago, fizzlesticks said:

Python is strongly typed though. Are you thinking of statically typed?

 

Yes, thank you. Or in the case of Python, dynamically typed.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×