What programming Language?

Howitzer

Chieftain
Joined
Jan 5, 2006
Messages
95
Location
Greek Empire
Hi guys...


I've deceided I need to learn a programming language, in order to take some professional things in my own hands rather than watching things happen...

What is my plan:

I want to be able to programm client-server apps.

mobile and desktop apps will send and receive data from sql server

a beautiful and practical web interface will handle that data

What is my background:

I am 36 yo and been in front of a pc since I was 12...I have worked with ms dos 5.0, ms dos 6.22, nearly all windows version, a punny yet comprehensive ubuntu experience,I'm a Cisco Certified Network Associate so I have a very good understanding of networks in physical and logical layer, and I'm an electronics hardware techinician by proffession so I also have an excellent understanding of computer hardware and other electronics hardware protocols like rs485.

I think python should be easy to evolve considering my age, and also should be able to allow me to do my plans..

I need some advice from expert programmers, (maybe some pros are here from firaxis or other software companies with great experience) on what should I choose for first language considering I'm a 36yo with a full time job and a full time family with an infant child therefore limited day time, maybe only dedicated weekends, and the fact that I really really need to know how to "tie my laces by myself" when it comes to programming cause I cant and wont tolerate people talking mambojumbo to me and playing experts with half my experience...

I do not intent to get involved in gaming and engines...all I need is to be able to create servers that listen from clients and nice web gui and read/write data to sql db.

I've read everywhere that python is an easy start up language, yet I would like to also know pros opinion on my plans

thank you for your time!

PS if you can suggest a nice place to start studying (eg free websites or paid courses) I would appreciate it.
 
(Not a "pro" in these regards, because not a software engineer, but a scientist)

If you want to have a webinterface with a backend and a SQL server connected, you'll most likely have 3 things to learn, not only 1:
- HTML for the web frontend (and possibly any language which will make this dynamic, be it PHP or Javascript)
- a language for the server backend (which one doesn't really matter)
- SQL (not sure if you know that already)

Dealing with the front end will be a totally different thing than dealing with the back end, and most people are not good at doing both, but only at one.
Had to do that myself for my master thesis, and I say I hate dealing with HTML and the different browsers. Backend is for me a lot easier though.

Can you do frontend and backend in one language? Yeah, is possible. There's a python web library which allows you to create a web frontend (PyJamas), but not sure if it's developed anymore. A minimum of HTML will still be necessary.
It's also possible to make both in Javascript, but I'm not sure how common a server backend in JS is.
I don't think anymore writes their server backends in PHP (but should be possible).

Python is in general recommended as a beginners language, because it takes away lots of micromanaging. You don't need lots of setup, making a small program doesn't need much clutter around, it doesn't need much organization.
But it's also not for everyone. Much in the languages is often a matter of taste. What they can do is in general not different, they're all in the same way powerful. Some are just easier to use for some purposes.
Personally I also find Python very easy (else I only know Delphi/Pascal, and a tiny bit of C++ and Javascript), and would recommend it, but as said, you'll need to see yourself if you can deal with it.

For learning material...I think I've heard good things about the course at the Khan Academy, but haven't tested it myself.
 
Thank you so very much for your prompt reply!

I already started takng the appropriate actions to begin with...

They are all in an infant stage, but we got to start from somewhere dont we?

So I joined codeacademy.com just to see if I can understand things..and yes, I understood they use outdated python in their tutorials...

I downloaded msvs which I found way too much to handle and pycharm which i found even more...

So I am downloading ubuntu cause I think linux will give me a more convenient enviroment...

Well considering the fact that its only days I'm doing this and my social life,

I would say I'm in deep sh..ip, but is there one who starts something new for him, that isn't?
 
Python, perhaps with the Django web framework for getting the front-end set up relatively easily, would be a good option. It's a relatively straightforward language, with a good size community, and without too many gotchas. Django is a Python web framework that is, I believe, the most commonly-used one, and gives you a starting place for a simple website almost for free that you can then build out from.

There are two main caveats with Python that I'm aware of. One is, there's still a pretty big split between Python 2.7 and Python 3.x, which is probably what you saw on Code Academy. I think Python 3 is over 50% use now, but it's been out forever for just passing 50%. 95% of the time you won't have a difference though, it's just that 5% that can be a sticking point. Still, it's not too bad starting out... I started out learning Python 3 and then had to use Python 2 at work, and the switch was not bad.

The other caveat is that it's not necessarily the easiest programming language to get set up on Windows. From what I've read Python is a bit easier to get up on Linux, though I haven't tried it there since we had Windows boxes where I worked.

As another alternative, the Groovy language and the Grails web framework are also fairly easy to pick up, and make it easy to get a basic site up relatively quickly. They aren't as commonly used as Python, but should be easier to set up on Windows as they're based on Java technologies which work well across operating systems. If your workplace is already using Java, that could also be an advantage since Groovy is interoperable with Java (but Groovy generally has fewer gotchas and should be easier to learn, and Grails in particular makes it easier to get a basic site up than Java).

Another popular option is Ruby, and its Rails web framework. I'd lean a bit towards Python over Ruby because Python takes a "there's one right way to do it" approach versus Ruby's "we should accomodate various ways of doing things" approach. The upshot being, Ruby may be easier for existing programmers to pick up who come from different backgrounds, but Python likely is easier as a first language, since you won't see 3 ways to do the same thing and be confused about it, or not recognize two of them. Still, Ruby is a relatively non-complicated language.

Code Academy isn't a bad place to start out; they will show you the basics and let you start experimenting. My main complaint with them is they tend to be pretty light on the explanation of why things work the way they do, which becomes more important the farther you get. Although paid, I'd recommend Pluralsight as a next location (and they do have a trial); their videos tend to go into a lot more detail about why things work the way they do, and they also have a much wider variety - for example you can get a lot more detail about Django there, which will be very useful if you decide to stick with the Python route and want to get practical web applications working.
 
I'm a front and back-end developer, I use notepad++ to write my code, I use bootstrap as a foundation to build responsive UI, javascript, jquery, and other libraries for client-side code, and coldfusion for server-side code that talks to our SQL server as well as the Oracle db.

If you want to build bona fide apps, like apps that appear in the app store on your phone, that you can download, then none of what I mentioned will be useful to you. But if you want to build a cool web interface to some data which sits in an SQL database somewhere, then I would start by picking a decent server-side language. PHP is pretty popular and I think the cheapest, but in my own personal opinion, it's a horrible language to learn programming in. I have no idea what sort of frameworks you can get for it, as I use coldFusion at work, but either way a lot of people use PHP, so it should be on your radar. I would also look into bootstrap, it makes it easy for you to build an interface that works on multiple devices. For this I recommend that you learn the basics of CSS. You should also be comfortable with Javascript and jquery, so that you can implement slightly more advanced UI elements and functionality.

If you want dynamic client-side stuff happening, then you need to read up on AJAX, although I'm not sure if people still call it that today. It's essentially using Javascript to make things dynamic client-side, usually involving calls made to the server via client-side as opposed to server-side. Most frameworks (jquery, etc.) encapsulate this stuff very well these days, but you should still be familiar enough with what's happening under the hood when you're working with it. And if you end up doing this, you might very well have to acquaint yourself with the JSON file format. Not super important, depends on what you're doing, but I come across it all the time.

If you have never ever programmed anything in your life before, I wouldn't start there. I'm not sure where I'd recommend you start, really, but based on what I'm reading above, Python is a good starter language. Personally I started with BASIC and LOGO (the one with the turtle), then Turing, then Pascal. I learned programming fundamentals in those languages, then I moved on to C, C++, etc. to learn more advanced topics. What you need to do is to learn programming fundamentals. Then you need to learn object oriented programming fundamentals. Then you need to learn client-server interaction fundamentals. Then you can start learning javascript and whichever server-side language you pick, and whichever frameworks you pick. CSS and HTML aren't programming languages, so in the scope of this paragraph I shouldn't mention them, but you should be familiar with them to some extent anyway.

Mind you I'm a web developer, which is quite a bit different from your average software engineer, which is quite a bit different from a person who builds apps.
 
They're server-side JavaScript. For the 2016 Stack Overflow Developer survey, JavaScript is the most popular language for both front-end and back-end work.

If you're technically savvy, you can even host node.js apps on something like nearlyfreespeach.net (very highly recommended) to approximate the old-style LAMP framework, so you don't have to run a VPS just for web apps.

Personally, I'm not really a fan of the language, if I need to use it, I try to stick to TypeScript.
 
My credentials:

I taught myself to program basic at 10 years old from an old CD-Rom tutorial app. Since then i have also taught myself, C, C++ (my favorite), C# (my second favorite), Java, Python, Ruby, and most recently Lua. Also countless markup languages are in my repertoire at this point.

I now am a 3rd year Computer Science major at University. I want to open my own indie studios and work with a team to develop steam games, mobile apps, and other software eventually.

I have already done some extensive work both in hobbyist and school projects in different programming SDKs and APIs such as but not limited to: DirectX 9 and DirectX 11, OpenGL 4, SFML. And also game engines like Unity3D and Unreal. While none of my work readily available for download yet, there will likely be an application or two with name and brand on it sometime soon after I finish College.

All that said, my suggestion is this:

If you think you will, at any point in the future, want to create anything other than the aforementioned type of client-server applications, and/or web development. Then do not start with an interpreted scripting language like Python. If however, that is all you want to do, then Python is in fact one of the best choices of programming languages you could pick to learn from... in that specific scope of software development.

In terms of being able to create fully featured desktop applications, or any other type of more complex application for that matter, then Python IMO is a bad choice. The reason I say this is because I can not tell you how many times I have worked with and had classmates that came into programming from learning high-level scripting languages (usually it is Python), that can not make an smooth easy transition to compiled languages like C, C++, C#, and Java.

I find this is generally because the features, and implementations of these types of languages are very different. Interpreted language in my experience are much easier to learn and implement, but are much harder to branch out from because of this. Whereas, people that first learn compiled types of languages usually understand enough different types of complex programming language paradigms that they can easily pick up other languages in a short period of time.

Of course, this is simply my opinion on general experience (and I've had a lot of it at this point). It can not be said to be true for everyone that comes into programming through a scripting language, abut I would say it is far more likely.

So in short, it really just depends on what you want to do and what you are willing to do to do the thing that you want to do. ;)
 
My credentials:

I taught myself to program basic at 10 years old from an old CD-Rom tutorial app. Since then i have also taught myself, C, C++ (my favorite), C# (my second favorite), Java, Python, Ruby, and most recently Lua. Also countless markup languages are in my repertoire at this point.

I now am a 3rd year Computer Science major at University. I want to open my own indie studios and work with a team to develop steam games, mobile apps, and other software eventually.

I have already done some extensive work both in hobbyist and school projects in different programming SDKs and APIs such as but not limited to: DirectX 9 and DirectX 11, OpenGL 4, SFML. And also game engines like Unity3D and Unreal. While none of my work readily available for download yet, there will likely be an application or two with name and brand on it sometime soon after I finish College.

All that said, my suggestion is this:

If you think you will, at any point in the future, want to create anything other than the aforementioned type of client-server applications, and/or web development. Then do not start with an interpreted scripting language like Python. If however, that is all you want to do, then Python is in fact one of the best choices of programming languages you could pick to learn from... in that specific scope of software development.

In terms of being able to create fully featured desktop applications, or any other type of more complex application for that matter, then Python IMO is a bad choice. The reason I say this is because I can not tell you how many times I have worked with and had classmates that came into programming from learning high-level scripting languages (usually it is Python), that can not make an smooth easy transition to compiled languages like C, C++, C#, and Java.

I find this is generally because the features, and implementations of these types of languages are very different. Interpreted language in my experience are much easier to learn and implement, but are much harder to branch out from because of this. Whereas, people that first learn compiled types of languages usually understand enough different types of complex programming language paradigms that they can easily pick up other languages in a short period of time.

Of course, this is simply my opinion on general experience (and I've had a lot of it at this point). It can not be said to be true for everyone that comes into programming through a scripting language, abut I would say it is far more likely.

So in short, it really just depends on what you want to do and what you are willing to do to do the thing that you want to do. ;)

Wait, you came into programming via Basic (which is the equivalent of today's high-level scripting languages), but you look down on you classmates that came from a high-level scripting language? Might it just be that you have much more experience and have forgotten your own struggles?

I do not think there is a conceptual difference between compiled and interpreted languages that would impact the choice of language to start programming with - and to be honest it is actually wrong to call a language compiled or interpreted, because it is actually the implementation that is one or the other (or both). You could write an interpreter for C if you wanted to.

There is one difference between compiled languages, which is speed. You should not do resource intensive data processing in an interpreted language. But for most of that you should be calling a library anyway. The rule of thumb in an interpreted language is: avoid writing loops!

The real question is high-level or low-level. And there I would recommend to go for high-level languages like Python. In the beginning, you need to learn how to think about programs and about the structures that map your ideas to the computer. At this stage, there is no point to mess around with memory management (and as a beginner you are likely to get it all wrong, anyway). If you later need the low-level stuff you can always learn this later and the more languages you learn, the faster you can pick up the next.

I have written programs in more than a dozen languages, but these days I am writing mostly Python, because IMO it is the most productive language for generic scientific applications.
 
I don't know that I'd equate high-level vs low-level with automatic memory management. Memory safety is more a function of language modernity - even low-level modern languages (Rust, Swift) are memory safe.

On Swift: Performance These Days

Rust and Swift are on a higher level than C and memory safety is one of the reasons why. Memory safety looks like a feature of modern languages, because most modern languages are quite high-level. As they should be, because most problems are high-level and most of the time there is no reason at all to bother with the low-level stuff.

At the lowest-level, a language has to be memory-unsafe, because there might be nothing around that can manage the memory. Fortunately, there are not many reasons to go there.
 
Memory safety looks like a feature of modern languages, because most modern languages are quite high-level..

No, memory safety looks like a feature of modern languages because low-level modern languages are designed with memory safety. :p

At the lowest-level, a language has to be memory-unsafe, because there might be nothing around that can manage the memory.

Rust doesn't have anything around to manage the memory, there's no garbage collector. It enforces memory safety at compile time to LLVM via the type system.
 
No, memory safety looks like a feature of modern languages because low-level modern languages are designed with memory safety. :p


Rust doesn't have anything around to manage the memory, there's no garbage collector. It enforces memory safety at compile time to LLVM via the type system.

As I said, Rust is not a lowest-level language. The fact that it needs the LLVM and compiles to an intermediate representation should tell you that. The memory safety is only possible, because the LLVM provides an abstraction of the hardware. And even then, somebody though there is a need for the 'unsafe' keyword.
 
Of course it's not the lowest-level language, I never made that claim.

It's a modern low-level language. C is not that.

It is not low-level enough to fully replace C, so I would call it mid-level.
 
Top Bottom