Greetings;
I'm a newly novice programmer (actually used to make a living off Assembler and Fortran, 30+ years ago) and am somewhat overwhelmed by all the languages one seems to have to learn to enter the field of the Internet of Things.
My interest is mostly personal (building a dream home and like automation), so I signed up for a Udacity Beginner's Android class, where I learned XML and Java (with Android Studio).
Then I took an intro to IoT from Coursera and learned some C++ (Arduino) and Python (RPi).
Now, as I am working on controlling things via HTTP (and ultimately Android based phones and tablets), it seems I keep running into PHP (through Apache). And, since Z-Wave plus will likely be my comms protocol of choice, C++ will reappear.
Now, before I use up any more of my rather few and precious brain cells, would anyone like to venture an opinion on how to best navigate this maze?
Specifically, given Android phone/tablet GUI apps, Raspberry hardware (for now) and Z-Wave (ultimately) AND an overwhelming need for on-line tutorials until I can stand on my own feet:
- what languages will I need to master at a minimum ? (seems I'm stuck with XML/Java for Android, but for Rpi/Z-Wave?)
- given the choices above, what libraries (instead of Apache, to avoid PHP) should I be looking for?
- any interesting sites, which can help fledgling re-beginners like me?
- what IDEs to use?
-any other pearls of wisdom...
Thanks a bunch in advance...
Re: So Many Languages, so little Time
hi TriLife,
60++ i feel with you,
recently i was told MEAN stack is the FUTURE and a MUST KNOW,
well i took several steps into node.js ... and it is just not compatible with my ( differently wired ) brain.
ok, there will be a future without us, no problem.
i only know i feel good with python,
first with making desktop programs
and now with making web server / sites using python flask ..
IDE? while for pure python IDLE2 or 3 is helping for errors,
but now i use geany editor for python flask files python, html templates, SVGs..
because there i ( can ) have ( all ) related files open for edit while browser / werkzeug
helps with problems.
60++ i feel with you,
recently i was told MEAN stack is the FUTURE and a MUST KNOW,
well i took several steps into node.js ... and it is just not compatible with my ( differently wired ) brain.
ok, there will be a future without us, no problem.
i only know i feel good with python,
first with making desktop programs
and now with making web server / sites using python flask ..
IDE? while for pure python IDLE2 or 3 is helping for errors,
but now i use geany editor for python flask files python, html templates, SVGs..
because there i ( can ) have ( all ) related files open for edit while browser / werkzeug
helps with problems.
Re: So Many Languages, so little Time
Python is a very good language and I use it for all of my projects just because it has a certain elegance to it that I use quite a lot. You can easily make http servers in Python and its pretty popular. I suspect there's already a lot of resources for what you want to do it python. And it can be used in many different applications. I myself am trying to teach myself C++, but I haven't had much motivation because there isn't a use for me for it right now.
There are 10 types of people: those who understand binary and those who don't.
Re: So Many Languages, so little Time
Quite often a language can do more than one thing so there might not be a need for Python + PHP + C++ + Java etc.
For instance, it's quite possible to use Python instead of PHP for the backend of a web application. One way of doing this is Flask (note the K - don't get confused with Flash which is a different thing). There's a guide to Python with flask on the main raspberry Pi site.
I also wouldn't be surprised if it's possible to use the Z-Wave stuff from Python on the Pi end.
On the Arduino (ATMega) side of things there's really only a simplified version of C++ if using the Arduino libraries or C if going for more standard ATMega/AVR code.
For designing a useful web interface you might also want to look at Bootstrap which provides a set of CSS and JS libraries that help produce good looking sites quickly.
Some alternatives to Python on the Pi are Node.JS and Ruby, both of which can interface with hardware on the GPIO and can provide a web application server. Python probably has be best support from the Raspberry Pi community although my personal preference is Ruby.
For instance, it's quite possible to use Python instead of PHP for the backend of a web application. One way of doing this is Flask (note the K - don't get confused with Flash which is a different thing). There's a guide to Python with flask on the main raspberry Pi site.
I also wouldn't be surprised if it's possible to use the Z-Wave stuff from Python on the Pi end.
On the Arduino (ATMega) side of things there's really only a simplified version of C++ if using the Arduino libraries or C if going for more standard ATMega/AVR code.
For designing a useful web interface you might also want to look at Bootstrap which provides a set of CSS and JS libraries that help produce good looking sites quickly.
Some alternatives to Python on the Pi are Node.JS and Ruby, both of which can interface with hardware on the GPIO and can provide a web application server. Python probably has be best support from the Raspberry Pi community although my personal preference is Ruby.
Re: So Many Languages, so little Time
Before Pi there was C and my world was happy.
After Pi, it was Python, C++, Grep, Sed, Bash, Ash, Awk, Lua, Luajit, Go, Mathematica, Octave, IPython, R, Rust, Micropython, JS, Node, CSS, HTML5, PHP, CGI, PERL.... GCC, Make, Buildroot, Agile, Extreme, Pair, Git , Jenkins, Docker........
My world was full of Babel.
Then I found Ultibo and from the ashes arises Lazarus and Pascal and my world is calm again.
After Pi, it was Python, C++, Grep, Sed, Bash, Ash, Awk, Lua, Luajit, Go, Mathematica, Octave, IPython, R, Rust, Micropython, JS, Node, CSS, HTML5, PHP, CGI, PERL.... GCC, Make, Buildroot, Agile, Extreme, Pair, Git , Jenkins, Docker........
My world was full of Babel.
Then I found Ultibo and from the ashes arises Lazarus and Pascal and my world is calm again.
I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
Re: So Many Languages, so little Time
C is the best 

Re: So Many Languages, so little Time
Flame onC is the best
C/Python for multicore, arrays, AI.ML,CV......? You need extra stuff, numpy etc
Free Pascal has native support for multicore, arrays... and compiles faster

Flame off
I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
Re: So Many Languages, so little Time
wrt lang / time
site `Learn X in Y minutes` might be of interest
---> https://learnxinyminutes.com
site `Learn X in Y minutes` might be of interest
---> https://learnxinyminutes.com
learnxinyminutes.com wrote:Take a whirlwind tour of your next favorite language.
Re: So Many Languages, so little Time
Hi,
Honestly I handle almost every things knowing C. For all web things a bit of javascript and particulary node.js, for android just a bit of java. I once had to do an android application, and I used something called Evothings https://evothings.com/ which is wonderfull and dedicated to IOT application + IDE.
You have a lot of example comming with evothings and you can test them on the go, you compile and send via internet to your mobile phone for "real time testing" if you know what I mean.
I think that for all home automation project to make it flexible and fast enough (and also to have some reliable and usefull knowledge), I'll go for all the sensor side and calculation for C (or C++ if your more comfortable), and a node.js server for the web part, it would handle in a lovely way all request, and for the adroid side evothings IDE.
YCN-
Honestly I handle almost every things knowing C. For all web things a bit of javascript and particulary node.js, for android just a bit of java. I once had to do an android application, and I used something called Evothings https://evothings.com/ which is wonderfull and dedicated to IOT application + IDE.
You have a lot of example comming with evothings and you can test them on the go, you compile and send via internet to your mobile phone for "real time testing" if you know what I mean.
I think that for all home automation project to make it flexible and fast enough (and also to have some reliable and usefull knowledge), I'll go for all the sensor side and calculation for C (or C++ if your more comfortable), and a node.js server for the web part, it would handle in a lovely way all request, and for the adroid side evothings IDE.
YCN-
Re: So Many Languages, so little Time
Why you need multicore (with C) for RPi? What special multicore task will implement? For most things, single threaded application is enough - multicore CPU is good for multitasking. It is not necessary to make multithreaded every program - even simple loop writing numbers 1-10000 in a file...Gavinmc42 wrote:C/Python for multicore, arrays, AI.ML,CV......? You need extra stuff, numpy etc
Re: So Many Languages, so little Time
I don't think you know C at all.Gavinmc42 wrote: C/Python for multicore, arrays, AI.ML,CV......? You need extra stuff, numpy etc
Free Pascal has native support for multicore, arrays... and compiles faster![]()
C can of course do almost anything you would ever want (even arrays!!!!!!)
Thats why much of the system (Raspbian) and commonly the libraries are actually written in C regardless of the target language. The Python doct. doesn't even try to hide the fact that its just calling C library functions in many cases.
Python is also extremely capable and a great choice for the official language.
Re: So Many Languages, so little Time
I am used to single core micros, wanted a language that was easy to learn how to do this newfangled multi core stuff.Why you need multicore (with C) for RPi.
After learning so many languages getting my head around Linux and using Pi's, I felt there was no need to persist with C.
Plus dependencies and libraries have caused me a few issues in the past.
Backing up 8GB complete images for Raspbian projects

Debug someones else library code, don't have time for that if I only use it once. Python white space is a pain. Numpy is extra.
The point is to learn to code, not to learn to use someone else's library and/or only use a tiny part of the massive library.
How many wrappers are on wrappers, will the real code please stand up

I also want to learn computer vision and Neural Networks, Machine Learning etc from the ground up.
A language that can natively handle multi dimensional arrays would be good. Go and Rust seemed logical.
Then I found Ultibo, based on Lazarus/Free Pascal Compiler.
The Laz IDE looked like others I have used for decades in C, not hard to learn to use it.
Pascal was a blast from the past, if I feel nostalgic I can even use the Text based FP IDE

I can use someones library units or do my own. I end up with a small kernel.bin, nothing else, no added strings.
Ultibo also has Aarch64 and QEMU support, Aarch64 is important because it gives faster NEON/SIMD code.
Faster NEON is good because I don't have to use that VC4 GPU thing Pi's have. Serious head damage figuring out the VC4.
So one tool/language can do what I want to do now and for the next few years.
Getting on in years, only got a few decades left.
Don't really want to master all those other things to run them on Linux which is getting less secure every month.
That's kind of important for the IoT stuff I do. Don't tell me JS is totally secure and Node.js does my head in.
I can use Laz/FPC to make stuff on Windows/Linux/Pi's.
I can use the Ultibo version to make baremetal 64bit multicore/multitasking apps and throw Linux away.
Embedded FPC for Cortex M0-M4 is also possible for a few micros, with more in time.
I might go Rust once Redox OS runs Aarch64 on Pi's

In the meantime I am moving to piCore to get away from that kitchen sink bloat called Raspbian

No Pascal

I'm a hardware guy, not a coder, make hardware quick, make code quick.
I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
Re: So Many Languages, so little Time
From the software dev side of things I'd argue the other way. Use existing libraries where possible, at least on a full system (like the Pi is). However, do some research first and check that the library actually meets you're requirements. There are often several libraries doing similar things, choose one that best fits your needs, is well documented and is actively worked on - there's plenty of libraries where dev stopped when it was good enough for the authors needs.Gavinmc42 wrote: The point is to learn to code, not to learn to use someone else's library and/or only use a tiny part of the massive library.
How many wrappers are on wrappers, will the real code please stand up![]()
On a Microcontroller then that might not apply - but programming microcontrollers is a different beast to programming inside an OS.
Going back to the OP, Whilst C/C++ are very good/powerful languages I'm not sure they're the best fit for a novice. The likes of Python/Ruby/Node.JS (and probably a few others) are likely to be much better, have larger communities willing to help beginners, and generally don't have obtuse ways of failing due to some nuance of the language you don't really understand yet.
Re: So Many Languages, so little Time
It is good that Pascal is missing. Pascal is regrettable misunderstanding - no need to learn it from now on.Gavinmc42 wrote:No Pascal
Re: So Many Languages, so little Time
Though Pascal will be useful if one wants the fairly easy route to Bare Metal on a Pi which Ultibo provides.i486 wrote:It is good that Pascal is missing. Pascal is regrettable misunderstanding - no need to learn it from now on.Gavinmc42 wrote:No Pascal
I have personally settled on Python for most things I do now. It is not perfect but it is pretty capable and how easy it is to use cross-platform makes up for any dislike. I am hoping that in the future we will see a microPython solution for Bare Metal on a Pi.
Re: So Many Languages, so little Time
Very easy route, don't even need to know assembler, but you can use it inline natively tooThough Pascal will be useful if one wants the fairly easy route to Bare Metal on a Pi which Ultibo provides.

I started with Python on Pi, easy to use and learn.
Even still use Micropython on piCore (comes standard).
But compiled languages are a bit faster

I know C from 2nd edition K&R, C Lib, ucLib etc.
Tried C++, C# but my brain is not wired OOPs.
That would be why a RAD tool/language is useful.so little Time
Pay for a little speed loss over C but compiling is much faster.
Faster compile = faster code/compile/test cycles.
Not as bad as the old days of going out for lunch while the compiler crunches C code.
Been there, done that, good way to waste time, library collecting, then checking the docs to figure out how to do simple stuff like a line plot (hint gnuploy.pyHowever, do some research first and check that the library actually meets you're requirements

I am also a little paranoid about what is inside all those big libraries and their dependencies, thousands of files to check

Bite your tongue, I'm waiting for Oberon to show on a Pi , real, not demo version:lol:It is good that Pascal is missing. Pascal is regrettable misunderstanding - no need to learn it from now on.
Pascal is making a comeback, it ran really fast on a I486, even Bill G was annoyed with it's compiler speed.
I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
Re: So Many Languages, so little Time
RAD tools are not for fast compiler but for fast development. C#/.Net give the "speed" of development, not the speed of compilation.Gavinmc42 wrote:That would be why a RAD tool/language is useful.
Pay for a little speed loss over C but compiling is much faster.
Faster compile = faster code/compile/test cycles.
Not as bad as the old days of going out for lunch while the compiler crunches C code.
About Pascal - its syntax is ugly. The other is similar to the same program written in C. But looking on hundreds of BEGIN / END / := / PROCEDURE is stupid. The design of Pascal syntax is to help beginner to "understand" a program from the first day (or to find something understandable).
Ultibo sounds good as idea, but when I read "Pascal" my interest finished.
Re: So Many Languages, so little Time
Yep I get that plus fast compiles, saves me time. One language, save time.RAD tools are not for fast compiler but for fast development
Or when you reread something you coded a year agoThe design of Pascal syntax is to help beginner to "understand" a program from the first day

Still looking for that "goto line" equivalent.
Go looks like it is an improvement on the syntax of Pascal, like Rust looks a little like C.
Forth does that for mebut when I read "Pascal" my interest finished.

I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
Re: So Many Languages, so little Time
To the OP, not the language debaters,
Learn Python, a lot can be done with it and the Pi in RaspberryPi is for Python.
Then to navigate what you need, just do your project and do what needs to be done. Search the different ways and stay with the preferred language of the target device.
That way you gain all the work and advice that others have done before.
Learn Python, a lot can be done with it and the Pi in RaspberryPi is for Python.
Then to navigate what you need, just do your project and do what needs to be done. Search the different ways and stay with the preferred language of the target device.
That way you gain all the work and advice that others have done before.
Re: So Many Languages, so little Time
I would probably agree with that, but I can think of worse. No language is perfect, and it's often a trade-off of how painful it is to use against what it allows to be done. Sometimes it's necessary to just grit one's teeth, embrace a language with all its flaws for the greater good.i486 wrote:About Pascal - its syntax is ugly.
If one really hates a language but are forced to use it then one solution is to invent a version of it which is more appealing and knock-out a lightweight source code converter. An existing macro pre-processor may provide a simpler solution.
I was more disappointed; ho hum, another language to be learned. Though it was more having to learn how to do things with a more modern Pascal than the User Manual & Report version I learned.i486 wrote:Ultibo sounds good as idea, but when I read "Pascal" my interest finished.
Ultibo still holds my interest but my need for Bare Metal has been on the back burner for a while. They seem to have done a decent enough job and it looks like the best option for me so, if it means some inconvenience to ride on their shoulders, I'm willing to take that. Ugly or not; the end justifies the means!
-
- Posts: 14020
- Joined: Fri Mar 09, 2012 7:36 pm
- Location: Vallejo, CA (US)
Re: So Many Languages, so little Time
Languages? Don't forget... Compass, Autocoder, Mark IV, SNOBOL, DataAnalyzer, Jovial, SPS, ALC...
-
- Posts: 578
- Joined: Wed Nov 12, 2014 8:16 pm
Re: So Many Languages, so little Time
Being old school I moved onto C from BASIC decades ago, then C++ and those languages are my comfort blanket, when things get tough I go back to what I know. I also like being closer to the hardware and my pointers and ALLOCs allow that somewhat, I'm also happy with a bit of Assembler.
But if I were starting out now? I don't know. Your choices might be different if you are a hobbyist, compared to if your goal was a career.
I've been impressed by Python, particularly the way it handles lists, but for me it still has a toy town feel to it.
I detest Java, though it still might be a useful thing to know if you have the career goal.
For casual stuff I'm using JavaScript, meaning ECMAScript, it seems to have matured from its ropey beginnings.
But when the question of a language to pick comes up, you always get lots of different opinions, I wouldn't assert any one in particular except to say that learning to program, to code, to develop software is not the same as learning a programming language. Get the former right then you will find picking up new languages becomes a trivial thing.
But if I were starting out now? I don't know. Your choices might be different if you are a hobbyist, compared to if your goal was a career.
I've been impressed by Python, particularly the way it handles lists, but for me it still has a toy town feel to it.
I detest Java, though it still might be a useful thing to know if you have the career goal.
For casual stuff I'm using JavaScript, meaning ECMAScript, it seems to have matured from its ropey beginnings.
But when the question of a language to pick comes up, you always get lots of different opinions, I wouldn't assert any one in particular except to say that learning to program, to code, to develop software is not the same as learning a programming language. Get the former right then you will find picking up new languages becomes a trivial thing.
Re: So Many Languages, so little Time
Learn them all, gets easier with each one.
But Python is a good spot to start, if you are having trouble doing what you want with it, then move on.
That is the good thing about Pi's, they run most languages.
That is the bad thing about Pi's, they run most languages
High level
Even Java/Netbeans and Processing work on a Pi3 now, just a little slow.
Processing runs on Android too.
Low Level
If you want to learn Linux, Shell script with Awk and Sed can do an awful lot.
Most of the world is shell scripted underneath. Add some HTML5, CCS, CGI, dash of JS.
But Python is a good spot to start, if you are having trouble doing what you want with it, then move on.
That is the good thing about Pi's, they run most languages.
That is the bad thing about Pi's, they run most languages

High level
Even Java/Netbeans and Processing work on a Pi3 now, just a little slow.
Processing runs on Android too.
Low Level
If you want to learn Linux, Shell script with Awk and Sed can do an awful lot.
Most of the world is shell scripted underneath. Add some HTML5, CCS, CGI, dash of JS.
I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges
-
- Posts: 578
- Joined: Wed Nov 12, 2014 8:16 pm
Re: So Many Languages, so little Time
By my understanding of the terms "high level" and "low level" when applied to programming languages I would place the disciplines in your low level list as higher level than your high level list.Gavinmc42 wrote:
Low Level
If you want to learn Linux, Shell script with Awk and Sed can do an awful lot.
Most of the world is shell scripted underneath. Add some HTML5, CCS, CGI, dash of JS.
Re: So Many Languages, so little Time
For me high level is IDE's, libraries and RAD coding, 500MB-1GB installs.
Full OS taking 4-8GB etc
Low level meaning, all you have/need is the kernel and busybox, < 20MB.
Skill is in reverse
Full OS taking 4-8GB etc
Low level meaning, all you have/need is the kernel and busybox, < 20MB.
Skill is in reverse

I'm dancing on Rainbows.
Raspberries are not Apples or Oranges
Raspberries are not Apples or Oranges