Jump to content

What to learn?

uzivkovic997

Hello guys,

I know nothing about programming but I would like to start learning some programming language.
What would you recommend me to start with and if you know some free course where I can start with just to learn some basics before I pay for sth?
Things i would like to do in future are creating some software.

What is the easiest language for newbie to start with?
Some people are saying I should start with Python but I want to hear your opinions.

 

Thanks in advance.

Link to comment
Share on other sites

Link to post
Share on other sites

start with Python. You are sheltered from all advanced stuff that other languages require you to know before you even start and it's a widely-used scripting language. Don't know courses that are free and even less for beginners.

Link to comment
Share on other sites

Link to post
Share on other sites

In contrary to what @PeterBocan suggested, I'd suggest you get into concepts of Programming first, that'll allow you to adopt quickly, there's really not the "one language to rule them all". It's about being able use what suits your task best. If you understand the basic concepts you'll have an easier time to get into what ever you need. Sometimes you'll find yourself in a position where you either have to solve issues really complicated or just use a framework in another language, the latter is the (personally) preferred solution.

 

This is based on how I got into Programming

 

I started programming with Turbo Pascal, it's a structured non Object Orientated Programming language that really encourages you to think about your program and structure, you don't have really complicated brackets or spacings, you simply start with `begin` and `end`.


Following up I'd suggest a Strongly Typed OOP language like C#, this helps you understand typing and what issues can arise with that and once you've got the basics down in C# you'll find that you're going to have an easy time to get into most languages like Python, Java, JS or alike.

 

Maybe have a look at some Assembly or CIL(Common Intermediate Language) 

 

Critical in all of this is just to really understand the concepts and less the syntax itself, finding and learning syntax is the easiest part. Learning the concepts (encapsulation for example) is what really grinds your gear.

 

As a basic overview for what would be interesting to learn:

- HTML, JavaScript, PHP for websites and webapps (concept: MVC)

- C# (unity, webapps and alike with ASP.NET, which is c# based. concept OOP, MVC)

- Java (pretty much the same as C# except unity)

- C++ (complex system close language, concept: OOP)

- C (very close to the hardware layer, concept: structured)

- Python (very versatile and popular Scripting language, like java very cross plattform compatible since it's not compiled but interpreted)

 

If you have any questions left feel free to ask.

 

Best of luck in your journey.

Link to comment
Share on other sites

Link to post
Share on other sites

codeacademy is a good place to start. but i will admit it's a little too much handholding.

 

a wonderful start is Harvard's CS50 course offered on edX. the lectures are amazing, very engaging passionate and easy to understand. https://www.edx.org/course/cs50s-introduction-to-computer-science

they also have other courses such as intro to game dev and intro to web development

 

next is MIT's intro to cs with python (if you like Python). IMO the lectures are a bit less lively but the content is very good https://www.edx.org/course/introduction-to-computer-science-and-programming-using-python-2

 

if you want programming youtube channels CS Dojo and The Coding Train are very good ones 

 

before jumping into some projects, i super recommend looking at Clean Code by Robert Martin

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, uzivkovic997 said:

Some people are saying I should start with Python

Don't listen to them. I, personally, find Python, despite its huge community etc. etc., extremely lacking in terms of syntax and performance.

 

Here's a number of (unsorted) recommendations instead, based on my usual "boilerplate answer":

 

1. Start with 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. 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.

 

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. If this is too complicated, you might want to look at Racket as well which is a Scheme dialect (another Lisp), but its standard library lets you do almost everything - it even has a GUI framework and a web server built-in.

 

Cons: Due to Lisp's unique approach, it will be hard for you to adapt any Lisp knowledge to non-Lisp languages.

 

2. 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.

 

3. Start with Go! (This one replaced Perl 5 on my list.)

 

Pros: Go is a low-level language, made by some of the folks who also invented Unix, Plan 9 and/or C. You can think of it as a "new C" with a better memory safety, and, while this is not entirely correct (C is still being updated), the inspiration Go took from C is obvious. It also features an acceptable package manager and it avoids library confusion by compiling static binaries by default which have a rather low overhead. Bonus points: Just like Racket, Go has a web framework in its standard library. See here for details. Yes, I know that I talked badly about Go in the past, but it does have its merits.

 

Cons: Go - just like Python - requires you to use a certain style of code formatting, e.g. where you put your braces and parentheses. If you're fine with that and you are afraid of C, nothing is wrong with Go. Also, the Go language community has taken the word "Gopher" for most of their stuff, making the Gopher protocol less popular. But that is not related to the language, of course.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

@kdawwgg1221, @PeterBocan, @De-Wohli, @Techicolors, @Dat Guy, your help is very much appreciated, thank you.

I think I'm gonna try to find some books about concepts of programming like @De-Wohli suggested and then move to C# for beginning and see how it will go.
I'm not that much interested in creating web sites so I think I will skip HTML. 

 

@Techicolors I will explore edx in order to find any good course for C# for beginners, thank you for sharing this website.

I would like to apologize for my not perfect english, maybe you had hard time reading my post.

 

Once again, thank you very much everyone.
 

Link to comment
Share on other sites

Link to post
Share on other sites

@Dat Guy While I totally agree that Python is "overrated" I think Go and Lisp wouldn't be too great for a starter langauge, C absolutely rocks but has it's own issues for beginners. But once the basics are down Lisp and Go sound like a really good idea to move forward. Really surprised to seeing someone suggesting Lisp.

 

@uzivkovic997 Once you got started a little I suggest having a look at codingame or codewars These are two websites that provide challenges in an fun and engaging way that'll let you learn about common algorithms and help you get into problem solving, for example: Sort a list with less than X operations. Both plattforms support most of the "common" languages so what ever you choose you'll probably be able to dig right in.

Link to comment
Share on other sites

Link to post
Share on other sites

I would have loved having started with Lisp instead of Basic and Pascal, I guess. It all depends on your mindset...

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

@De-Wohli these websites seems to be really good. I did something similar but for Linux, its called OverTheWire if anyone is interested to check it.
 

@Dat Guy I agree with you that it all depends on someone's mindset, but problem is that I absolutely have no clue about programming. So I would like to start with something most friendly for absolute beginners in order to figure whole concept of programming, and then I will learn as many languages as I can.

Link to comment
Share on other sites

Link to post
Share on other sites

9 minutes ago, uzivkovic997 said:

I would like to start with something most friendly for absolute beginners

Practical Common Lisp could be for you:

http://www.gigamonkeys.com/book/

 

Or, for C, this website:

https://www.learn-c.org/en/

 

Or, for Go, this one:

https://golangbot.com/learn-golang-series/

 

Sadly, Racket does not seem to have that, except the book "Realm of Racket" which can be found online.

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

@uzivkovic997 E books are a great source of knowledge too, If you find good sales on humble bundle or alike you should consider them. Write Great Code series is something I can really recommend. Also never underestimate the power of the Microsoft Docs page when it comes to C#, Microsoft entry guide. If you choose to go with C# you'll find everything neatly explained there, just remember to use the english resources, other languages are often automatically translated. 

Link to comment
Share on other sites

Link to post
Share on other sites

@Dat Guy I took a look at this website for "C" and this might be really helpful to learn some basics, thank you.


@De-Wohli this Microsoft website also seems really helpful, thank you for all informations. 
About "Write great code", I found both parts for arround $50 on Amazon so I will order them tomorrow.

 

I really want to get into programming, but I don't want to pay for example some online course and learn nothing, that would be only waste of money, and I would like to invest all money I in something really good and helpful. 

Thank you guys one more time, I don't know how to repay you.

Link to comment
Share on other sites

Link to post
Share on other sites

I would recommend to figure out what you want to do,  do you want to go for web design? - css, html,
Do you want to make games? - C++ (also works for math, btw "Windows" is built on c++), python etc.

https://www.w3schools.com/
explore this website, it is free and really helpfull for beginners ;)

Link to comment
Share on other sites

Link to post
Share on other sites

Python is great to start to learn. This website has the basics covered. You learn what variables are, basic loop, conditions. You don't need to go very deep in the language at first. Simply learning how things works is enough to start with. After learning basics you can quickly dive into any functional language.

 

Javascript is also easy to start. You can create a dummy empty webpage that execute one method and then play with how variable, maths, text manipulation works. Same as Python but you don't need to install anything.

 

Once you are familiar with the basics (variables, loops, conditions, switch, array, methods, parameters, return values) then either go deeper in one of the 2 language above or pick any functional language and you just have to do a quick overview on what is the equivalent syntax of the basics which should take your half a day to make a small excel file with apple to apple with the language you learned the basics from. Then start learning that language.

Link to comment
Share on other sites

Link to post
Share on other sites

6 minutes ago, Franck said:

pick any functional language and you just have to do a quick overview on what is the equivalent syntax of the basics which should take your half a day to make a small excel file with apple to apple with the language you learned the basics from.

The problem here is, specially with suggesting python, there's a pythonic way of things that really don't translate well into other languages and vise versa. You can solve stuff in python by using ways you've learned in other languages just fine (not recommended but at works) while python has so many gimmicks that it really hardly translates the other way.

 

But I agree on the importance of the basics but still would recommend a Strongly typed language for this, specially according to variables etc.

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, De-Wohli said:

there's a pythonic way of things that really don't translate well into other languages and vise versa. You can solve stuff in python by using ways you've learned in other languages just fine (not recommended but at works) while python has so many gimmicks that it really hardly translates the other way.

True, but I doubt most green eared newbies are diving into things like comprehension lists. I think python can be an incredibly approachable entry point where almost everything but the program logic is abstracted from you. I 100% agree that shifting to a different language as part of learning is a good idea, but I don't think most people who are learning are going to be tainted by pythonisms. Imo python is perfect for being a very easy intro to basic logic (if, while, for loops, etc.) and a stepping stone to other languages when the person learning has 0 technical background.

Gaming build:

CPU: i7-7700k (5.0ghz, 1.312v)

GPU(s): Asus Strix 1080ti OC (~2063mhz)

Memory: 32GB (4x8) DDR4 G.Skill TridentZ RGB 3000mhz

Motherboard: Asus Prime z270-AR

PSU: Seasonic Prime Titanium 850W

Cooler: Custom water loop (420mm rad + 360mm rad)

Case: Be quiet! Dark base pro 900 (silver)
Primary storage: Samsung 960 evo m.2 SSD (500gb)

Secondary storage: Samsung 850 evo SSD (250gb)

 

Server build:

OS: Ubuntu server 16.04 LTS (though will probably upgrade to 17.04 for better ryzen support)

CPU: Ryzen R7 1700x

Memory: Ballistix Sport LT 16GB

Motherboard: Asrock B350 m4 pro

PSU: Corsair CX550M

Cooler: Cooler master hyper 212 evo

Storage: 2TB WD Red x1, 128gb OCZ SSD for OS

Case: HAF 932 adv

 

Link to comment
Share on other sites

Link to post
Share on other sites

3 minutes ago, Dat Guy said:

But so is Lisp, minus Python's annoyances.

except with S-expression, lisp syntax is very a-typical compared to modern high level languages.

Gaming build:

CPU: i7-7700k (5.0ghz, 1.312v)

GPU(s): Asus Strix 1080ti OC (~2063mhz)

Memory: 32GB (4x8) DDR4 G.Skill TridentZ RGB 3000mhz

Motherboard: Asus Prime z270-AR

PSU: Seasonic Prime Titanium 850W

Cooler: Custom water loop (420mm rad + 360mm rad)

Case: Be quiet! Dark base pro 900 (silver)
Primary storage: Samsung 960 evo m.2 SSD (500gb)

Secondary storage: Samsung 850 evo SSD (250gb)

 

Server build:

OS: Ubuntu server 16.04 LTS (though will probably upgrade to 17.04 for better ryzen support)

CPU: Ryzen R7 1700x

Memory: Ballistix Sport LT 16GB

Motherboard: Asrock B350 m4 pro

PSU: Corsair CX550M

Cooler: Cooler master hyper 212 evo

Storage: 2TB WD Red x1, 128gb OCZ SSD for OS

Case: HAF 932 adv

 

Link to comment
Share on other sites

Link to post
Share on other sites

Just now, Dat Guy said:

So is Python's.

The only major syntax different is using whitespace vs brackets, which is really not a huge step:

def foo(param):
  if (param != None):
    print(param)
  else:
    print("can't print param")

 

void foo(String param) {
  if (param != null) {
    System.out.println(param);
  else {
    System.out.println("Can't print param");
  }
}

 

(defun foo (param)
  (if 
    (not (eq param nil))
    (write param)
    (format t "~% Can't print param"))
)

One of these things is not like the others...

Gaming build:

CPU: i7-7700k (5.0ghz, 1.312v)

GPU(s): Asus Strix 1080ti OC (~2063mhz)

Memory: 32GB (4x8) DDR4 G.Skill TridentZ RGB 3000mhz

Motherboard: Asus Prime z270-AR

PSU: Seasonic Prime Titanium 850W

Cooler: Custom water loop (420mm rad + 360mm rad)

Case: Be quiet! Dark base pro 900 (silver)
Primary storage: Samsung 960 evo m.2 SSD (500gb)

Secondary storage: Samsung 850 evo SSD (250gb)

 

Server build:

OS: Ubuntu server 16.04 LTS (though will probably upgrade to 17.04 for better ryzen support)

CPU: Ryzen R7 1700x

Memory: Ballistix Sport LT 16GB

Motherboard: Asrock B350 m4 pro

PSU: Corsair CX550M

Cooler: Cooler master hyper 212 evo

Storage: 2TB WD Red x1, 128gb OCZ SSD for OS

Case: HAF 932 adv

 

Link to comment
Share on other sites

Link to post
Share on other sites

The first one, as the other two

  • allow me to format my indentations and line breaks however I wish
  • have explicit command dividers whereas the first one implies that one line equals one command

Or the second one, as the other two

  • don't use { ... }
  • don't use semicolons to end a command
  • use implicit types, not explicit types

?

Write in C.

Link to comment
Share on other sites

Link to post
Share on other sites

So to you these things:

  • not using ;
  • not using { ... }
  • not having as much line formatting control

Is more of an issue to some who is still learning how a for loop works, than an entirely different syntax paradigm that they won't ever see again?

Gaming build:

CPU: i7-7700k (5.0ghz, 1.312v)

GPU(s): Asus Strix 1080ti OC (~2063mhz)

Memory: 32GB (4x8) DDR4 G.Skill TridentZ RGB 3000mhz

Motherboard: Asus Prime z270-AR

PSU: Seasonic Prime Titanium 850W

Cooler: Custom water loop (420mm rad + 360mm rad)

Case: Be quiet! Dark base pro 900 (silver)
Primary storage: Samsung 960 evo m.2 SSD (500gb)

Secondary storage: Samsung 850 evo SSD (250gb)

 

Server build:

OS: Ubuntu server 16.04 LTS (though will probably upgrade to 17.04 for better ryzen support)

CPU: Ryzen R7 1700x

Memory: Ballistix Sport LT 16GB

Motherboard: Asrock B350 m4 pro

PSU: Corsair CX550M

Cooler: Cooler master hyper 212 evo

Storage: 2TB WD Red x1, 128gb OCZ SSD for OS

Case: HAF 932 adv

 

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

×