• Welcome to the new Internet Infidels Discussion Board, formerly Talk Freethought.

Software Projects for Beginners

lpetrich

Contributor
Joined
Jul 27, 2000
Messages
26,330
Location
Eugene, OR
Gender
Male
Basic Beliefs
Atheist
Beginner Programming Projects for New Software Engineers - YouTube by blondiebytes

She recommends starting with something simple with some well-defined goal of what one wants to do in it. Like play a guessing game or tic-tac-toe. She also recommends doing a text-interface one, like a command-line one.

Me: Like a number guessing game. Either guess the computer's number or the computer guesses your number. The number knower then provides hints to the number guesser: too large, too small, or the right answer.

No fancy GUI, she says. Me: if one wants a GUI, one can keep it plain and simple, with buttons, text fields, and menus, all with text in them. Once one gets that working, one can then add artwork.

Also, some well-known algorithm. Like a random-number generator. Me: Or sorting algorithms. I once did that with Delaunay triangulation, drawing triangles between points with certain nice properties. There are several algorithms for doing so, and I implemented most of them.

Or using data from some other software using some API. Like accessing some database. That's a common sort of task. One may also be supplying data to some other programmers in a company.

Or create a software library. Though one should also look at what's available in a language's standard library. One may learn how to use a package manager, so one can get additional libraries, like NumPy (Numerical Python) and MatPlotLib (does graphs) for Python.

Most of the time in one's programming career, one is working with code that already exists, fixing bugs, adding features, and updating it.

Look in some open-source repository like GitHub and look for what one might want to do in it. It can be good for finding out how others like to program.
 
How to Learn a Programming Language - YouTube also by blondiebytes

If you've never programmed before, you need to take some course in programming. But if you have, then you've learned a lot of things that will carry over, like variables, flow of control, functions, etc.

How might one start? Looking at a syntax reference to see how the language does things.

Me: like define variables. Does one have to explicitly define them? (static typing) or does one define them as one goes? (dynamic typing). That can make a big difference.

For more fancy things, one ought to look at what others have done with the language. Or else libraries like pandas for data handling, numpy for number crunching and matplotlib for plotting. These are for Python, though one can find similar things for other programming languages.

She then got into machine learning, and from there, into online instruction sites like Udemy and CodeAcademy. Some Udemy courses are very bad, she concludes, and CodeAcademy has the problem of having its own interface.


She also has Learn Data Structures by Exploring Java Source Code - YouTube

Recommends using an IDE and looking at the Java standard-library source code. She uses the Java "stack" class as an example. It's a last-in-first-out list that inherits from "vector", a list class with a behind-the-scenes array that gets extended if necessary.
 
https://www.tomdalling.com/blog/software-design/fizzbuzz-in-too-much-detail/

This is used in software developer job interviews
Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

A solution by an experienced software developer: (probably a joke)

Code:
[COLOR=#859900][FONT='inherit']module [/FONT][/COLOR][COLOR=inherit][FONT='inherit']FizzBuzz
[/FONT][/COLOR]  [COLOR=#CB4B16]DEFAULT_RANGE[/COLOR] [COLOR=#859900]=[/COLOR] [COLOR=#2AA198]1[/COLOR][COLOR=#859900]..[/COLOR][COLOR=#2AA198]100[/COLOR]
  [COLOR=#CB4B16]DEFAULT_TRIGGERS[/COLOR] [COLOR=#859900]=[/COLOR] [
    [[COLOR=#2AA198]'Fizz'[/COLOR], [COLOR=#859900]->[/COLOR](i){ i [COLOR=#859900]%[/COLOR] [COLOR=#2AA198]3[/COLOR] [COLOR=#859900]==[/COLOR] [COLOR=#2AA198]0[/COLOR] }],
    [[COLOR=#2AA198]'Buzz'[/COLOR], [COLOR=#859900]->[/COLOR](i){ i [COLOR=#859900]%[/COLOR] [COLOR=#2AA198]5[/COLOR] [COLOR=#859900]==[/COLOR] [COLOR=#2AA198]0[/COLOR] }],
  ]

  [COLOR=#586E75]##[/COLOR]
  [COLOR=#586E75]# Makes an array of FizzBuzz values for the given range and triggers.[/COLOR]
  [COLOR=#586E75]#[/COLOR]
  [COLOR=#586E75]# @param range [Range<Integer>] FizzBuzz integer range[/COLOR]
  [COLOR=#586E75]# @param triggers [Array<Array(String, Integer)>] An array of [text, predicate][/COLOR]
  [COLOR=#586E75]# @return [Array<String>] FizzBuzz results[/COLOR]
  [COLOR=#586E75]#[/COLOR]
  [COLOR=#859900]def[/COLOR] [COLOR=#268BD2]self[/COLOR][COLOR=#859900].[/COLOR][COLOR=#268BD2]range[/COLOR](range[COLOR=#859900]=[/COLOR][COLOR=#CB4B16]DEFAULT_RANGE[/COLOR], triggers[COLOR=#859900]=[/COLOR][COLOR=#CB4B16]DEFAULT_TRIGGERS[/COLOR])
    enumerator(range.[COLOR=#268BD2]first[/COLOR], triggers).[COLOR=#268BD2]take[/COLOR](range.[COLOR=#268BD2]size[/COLOR])
  [COLOR=#859900]end[/COLOR]

  [COLOR=#586E75]##[/COLOR]
  [COLOR=#586E75]# Makes a FizzBuzz value enumerator, starting at the given integer, for the[/COLOR]
  [COLOR=#586E75]# given triggers.[/COLOR]
  [COLOR=#586E75]#[/COLOR]
  [COLOR=#586E75]# @param start [Integer] The first integer to FizzBuzz[/COLOR]
  [COLOR=#586E75]# @param triggers [Array<Array(String, Integer)>] An array of [text, predicate][/COLOR]
  [COLOR=#586E75]# @return [Enumerable] Infinite sequence of FizzBuzz results, starting with `start`[/COLOR]
  [COLOR=#586E75]#[/COLOR]
  [COLOR=#859900]def[/COLOR] [COLOR=#268BD2]self[/COLOR][COLOR=#859900].[/COLOR][COLOR=#268BD2]enumerator[/COLOR](start[COLOR=#859900]=[/COLOR][COLOR=#CB4B16]DEFAULT_RANGE[/COLOR].[COLOR=#268BD2]first[/COLOR], triggers[COLOR=#859900]=[/COLOR][COLOR=#CB4B16]DEFAULT_TRIGGERS[/COLOR])
    [COLOR=#CB4B16]Enumerator[/COLOR].[COLOR=#268BD2]new[/COLOR] [COLOR=#859900]do[/COLOR] [COLOR=#859900]|[/COLOR]yielder[COLOR=#859900]|[/COLOR]
      i [COLOR=#859900]=[/COLOR] start
      [COLOR=#859900]loop[/COLOR] [COLOR=#859900]do[/COLOR]
        parts [COLOR=#859900]=[/COLOR] triggers.[COLOR=#268BD2]select[/COLOR]{ [COLOR=#859900]|[/COLOR](_, predicate)[COLOR=#859900]|[/COLOR] predicate.[COLOR=#268BD2]call[/COLOR](i) }
        i_result [COLOR=#859900]=[/COLOR] parts.[COLOR=#268BD2]size[/COLOR] [COLOR=#859900]>[/COLOR] [COLOR=#2AA198]0[/COLOR] ? parts.[COLOR=#268BD2]map[/COLOR]([COLOR=#859900]&[/COLOR][COLOR=#2AA198]:first[/COLOR]).[COLOR=#268BD2]join[/COLOR] : i.[COLOR=#268BD2]to_s[/COLOR]
        yielder.[COLOR=#268BD2]yield[/COLOR](i_result)
        i [COLOR=#859900]+=[/COLOR] [COLOR=#2AA198]1[/COLOR]
      [COLOR=#859900]end[/COLOR]
    [COLOR=#859900]end[/COLOR]
  [COLOR=#859900]end[/COLOR]
 [COLOR=#859900][FONT='inherit']end[/FONT][/COLOR]
 
It's easy (Python version):
Code:
for k in range(1,100+1):
  dv3 = "Fizz" if (k % 3) == 0 else ""
  dv5 = "Buzz" if (k % 5) == 0 else ""
  # Makes "FizzBuzz" for both
  dv35 = dv3 + dv5

  if len(dv35) > 0:
    print(dv35)
  else:
    print(k)


Related to this is which programming language to learn first.

Ideally, one would want a language where one can do simple things without having to learn a lot, but one which can be used for professional-quality work. That is, not a toy language.

I recommend Python. It satisfies both criteria.

The main problem with Python, however, is its suboptimal performance. That is due to its dynamic typing, finding the data type of each variable before working with it. One gets much better performance with a static-typing language like Java or especially C++.

For high-performance code, I recommend C++. It is backward-compatible with plain C, but it has *lots* of convenience and safety features. Both C and C++ have static typing, for instance, meaning that one must specify the types of most variables at compile time. Some supporters of C point out that it is a small language, with not many features. But one of them is its preprocessor. That feature works by simple substitution, and that makes it VERY bug-prone. In addition to the bugs that pointers can have, that makes C very vulnerable.
 
C++ has numerous features, but some of them are designed to provide alternatives to the more bug-prone features of plain C.

call by reference, with & - one can avoid pointers in function args.

inline - one can make some functions compiled inside the code that calls them rather than accessed by jumping outside that code and then returning. But that is essentially a hint, and the compiler can ignore it.

const - state that some variable is not to be modified after it is declared, something also available in plain C. In C++, one can do "const" for a variable whose value is set at runtime when it is cleared, and one can also state that an object method is not to modify its object by putting "const" after its definition.

#define PI 3.14159265...
vs.
const double PI = 3.14159265...;

template - this abolishes a *lot* of preprocessor use. Thus, for minimum and maximum,
#define MIN(x,y) ((x) <= (y) ? (x) : (y))
#define MAX(x,y) ((x) >= (y) ? (x) : (y))
template <class T> T &min(const T &x, const T &y) {return (x <= y) ? x : y;}
template <class T> T &max(const T &x, const T &y) {return (x >= y) ? x : y;}

The Standard Template Library - has containers and algorithms for working with them. STL containers clean up after themselves, deallocating whichever memory that they allocated.

auto - this type keyword is for type inference, thus getting round a major nuisance of static typing.

anonymous functions that can capture variables from the surrounding scope - just like what one can get in Java, Python, etc.
 
There is more in the works for C++

concepts - these are constraints on template arguments, like only accepting integer-like variables.

ranges - these are alternative ways of specifying iteration over containers, much like what one can do in Python and the like.

C++ recently got foreach:
for (variable: container) {}
much like what Java recently got and which Python has had for some time.


But with complexity like that, I don't recommend C++ for the novice programmer. Like someone who stumbles over what a variable is.
 
It's easy
Yes though it is interesting how many different approaches there are....
BTW I like an approach that is as straight forward as possible like this:
Code:
1.upto(100) do |i| 
  if i % 3 == 0 && i % 5 == 0
    puts 'FizzBuzz'
  elsif i % 3 == 0 
    puts 'Fizz'
  elsif i % 5 == 0 
    puts 'Buzz'
  else
    puts i
  end
end

Related to this is which programming language to learn first.
Sometimes primary school kids learn Scratch which involves moving around coloured shapes and blocks (and a little typing). I used it for my game design prototype. Though that is a toy language.

I agree that Python is a good language for beginners.

At the moment I'm learning C# for the Unity game engine and like it better than Unreal 4's C++. It is a lot better for beginners...

I like to use IDEs that have coloured syntax, autocompletion, and automatic suggestions about possible issues.

BTW do you think there is any language harder to master than C++?
 
It's easy
Yes though it is interesting how many different approaches there are....
BTW I like an approach that is as straight forward as possible like this:
Code:
1.upto(100) do |i| 
  if i % 3 == 0 && i % 5 == 0
    puts 'FizzBuzz'
  elsif i % 3 == 0 
    puts 'Fizz'
  elsif i % 5 == 0 
    puts 'Buzz'
  else
    puts i
  end
end

Related to this is which programming language to learn first.
Sometimes primary school kids learn Scratch which involves moving around coloured shapes and blocks (and a little typing). I used it for my game design prototype. Though that is a toy language.

I agree that Python is a good language for beginners.

At the moment I'm learning C# for the Unity game engine and like it better than Unreal 4's C++. It is a lot better for beginners...

I like to use IDEs that have coloured syntax, autocompletion, and automatic suggestions about possible issues.

BTW do you think there is any language harder to master than C++?
I think that's a moot question. For one thing, there are always harder languages, either due to poor design or deliberate obfuscation. But that doesn't make them more powerful or better in any way.

Secondly, you don't have to master a language to be able to use it. C++ is a multi-paradigm language that you can use however you please. In reality you'll probably only use a very small subset of what the language has to offer. I personally just learned about C++ priority queues last week, even though I've been using the language for over a decade. Never just stumbled into it before. It's a tool box that has many tools, but you don't have to be a wizard at every tool to be a good plumber or a carpenter or a mechanic.
 
excreationist said:
BTW do you think there is any language harder to master than C++?
I think that's a moot question. For one thing, there are always harder languages, either due to poor design or deliberate obfuscation. But that doesn't make them more powerful or better in any way.
I meant out of typical languages, not deliberate obfuscation (like Brainf*ck).

Secondly, you don't have to master a language to be able to use it.
Ok I mean enough to get an entry-level or average-level job. Not just hobbyist programming.
 
C++ seems like a really difficult language. I've written a little bit of C and C++ and even that was hard work.

Is C++ just popular because it's the standard, go-to low-level programming language, the everyone learns, every big tech company hires for, and has a huge ecosystem?

There must be better choices for writing high-performance code that is also nice to write and nice to look at.
 
It's easy (Python version):
Code:
for k in range(1,100+1):
  dv3 = "Fizz" if (k % 3) == 0 else ""
  dv5 = "Buzz" if (k % 5) == 0 else ""
  # Makes "FizzBuzz" for both
  dv35 = dv3 + dv5

  if len(dv35) > 0:
    print(dv35)
  else:
    print(k)


Related to this is which programming language to learn first.

Ideally, one would want a language where one can do simple things without having to learn a lot, but one which can be used for professional-quality work. That is, not a toy language.

I recommend Python. It satisfies both criteria.

The main problem with Python, however, is its suboptimal performance. That is due to its dynamic typing, finding the data type of each variable before working with it. One gets much better performance with a static-typing language like Java or especially C++.

For high-performance code, I recommend C++. It is backward-compatible with plain C, but it has *lots* of convenience and safety features. Both C and C++ have static typing, for instance, meaning that one must specify the types of most variables at compile time. Some supporters of C point out that it is a small language, with not many features. But one of them is its preprocessor. That feature works by simple substitution, and that makes it VERY bug-prone. In addition to the bugs that pointers can have, that makes C very vulnerable.

Eh, the performance criteria is not so straight-forward. The vast majority of the time, unless you are directly writing low-level numerical algorithms, gaming engines, etc, then CPython is fine. And with Python, specifically, you can use libraries like `numpy` to leverage the performance of highly tuned, compiled code.

And modern Python has added type annotations, and you can use libraries like `mypy` for static analysis of your code to give you the bug-catching advantages of statically typed languages.
 
C++ seems like a really difficult language. I've written a little bit of C and C++ and even that was hard work.

Is C++ just popular because it's the standard, go-to low-level programming language, the everyone learns, every big tech company hires for, and has a huge ecosystem?

There must be better choices for writing high-performance code that is also nice to write and nice to look at.

The new kid on the block is Rust, but that also has a learning curve. But it is much safer than C / C++.
 
C++ is basically an effort to graft improved language features onto plain C while keeping high performance. In fact, it was originally "C with classes", and some people mainly use it in that fashion.

I've seen C++ called the COBOL of the 90's, but I think that it's more like PL/1 (or PL/I). I've also seen that C++ is to C what lung cancer is to lung. I tend to think the opposite - I like how its container objects hide new/delete (or malloc/free) pairs, making programming with arrays much less of a headache.


As to alternatives to C++ for high performance, Rust is an up-and-coming one. It has complexities of its own, however, like its borrowing system for transmitting data to other functions.


I'll simplify my fizzbuzz Python version further with another ternary operator:
Code:
for k in range(1,100+1):
  dv3 = "Fizz" if (k % 3) == 0 else ""
  dv5 = "Buzz" if (k % 5) == 0 else ""

  # Makes "FizzBuzz" for both
  # the number for neither
  dv35 = dv3 + dv5
  outln = dv35 for len(dv35) > 0 else str(k)

  print(outln)
 
When I went to college for programming we were introduced with Java and simple command utilities. This seemed like a good approach, conceptually simpler than C++ but widely prevalent in the industry, and strongly typed.

In our second term we started using C++ so the college could knock out people who didn't have a chance of making it through the program. In our third term we started building real software.

I never really got a handle on C++ in my early days of programming, at least in terms of memory management, but I gather that 9 years later I'd enjoy using it again and wouldn't have much issue with it.
 
When I went to college for programming we were introduced with Java and simple command utilities. This seemed like a good approach, conceptually simpler than C++ but widely prevalent in the industry, and strongly typed.

In our second term we started using C++ so the college could knock out people who didn't have a chance of making it through the program. In our third term we started building real software.

I never really got a handle on C++ in my early days of programming, at least in terms of memory management, but I gather that 9 years later I'd enjoy using it again and wouldn't have much issue with it.

Nitpick: you mean statically typed. C is actually weakly typed. Python and C++ are both strongly typed (i.e. every object has a fixed, known type). Dynamic typing doesn't imply weak typing, insofar as "strong" and "weak" typing are well-defined (so not really).
 
When I went to college for programming we were introduced with Java and simple command utilities. This seemed like a good approach, conceptually simpler than C++ but widely prevalent in the industry, and strongly typed.

In our second term we started using C++ so the college could knock out people who didn't have a chance of making it through the program. In our third term we started building real software.

I never really got a handle on C++ in my early days of programming, at least in terms of memory management, but I gather that 9 years later I'd enjoy using it again and wouldn't have much issue with it.

Nitpick: you mean statically typed. C is actually weakly typed. Python and C++ are both strongly typed (i.e. every object has a fixed, known type). Dynamic typing doesn't imply weak typing, insofar as "strong" and "weak" typing are well-defined (so not really).

Fair enough. I'm definitely one of the doesn't think about this type of thing too hard programmers, as long as someone is still paying me.

It's funny, I've never really dwelled on semantics or technical debates but somehow I can also solve programming problems pretty efficiently.
 
C++ seems like a really difficult language. I've written a little bit of C and C++ and even that was hard work.

Is C++ just popular because it's the standard, go-to low-level programming language, the everyone learns, every big tech company hires for, and has a huge ecosystem?

There must be better choices for writing high-performance code that is also nice to write and nice to look at.

C and C++ are standards, there are formal definitions.

Back in the 70s the idea was we would all learn C which would be portable across platforms. You can still do hat if you code properly . C allowed direct access to addresses in memory which could speed up execution. It is also like a shorthand. When you are proficient you can write code faster and use less lines than languages like Pasdcal and Basic.

Code size and complexity grew in proportion to speed and memory size. First there was spaghetti code. Unstructured code written off the top of the head with jumping all over the place.'Then came Structured Programming. Top down sequential execution, and self documenting code, variables and functions with descriptive names and comments.

AS code grew that was insufficient. On a group project you cold compile code abd link te roject, but code coud still jump around. C allows a pointer to be placed anywhere. Data one one section could e clobbered by another section. Pointers.

Along came OOP. In a C++ object private code and data can not be seen or hacked by other code. You create an object to do something with a public interface . If you have to change code in the object it is transparent to anyone using the object. It minimizes the chance of unforeseen side effects. On large programs a big problem when someone makes a change and causes a problem elsewhere.

If you are writing a few lines of code you would not see it. For 10s of thousands of lines or mire then you would.

Back in te 70s when a programmer left a company a company could be held hostage because nobody else could maintain the code.h

In the 80s when I lived in Portland Or the Beaverton telephone company downloaded an update. When they rebooted it crashed. Someone at the manufacturer took out a seemingly useless code snippet. Put it back in and it worked. Not uncommon back then.

With random bug fixes code became impossible to maintain.

C++ was an answer. You can still write bad code, but it makes it easier to write good maintainable code.


For routine apps MS has Visual Basic. You can download the free community version of Visual Studio.

You can search for a Pascal compiler if they are still around..
 
C++ seems like a really difficult language. I've written a little bit of C and C++ and even that was hard work.

Is C++ just popular because it's the standard, go-to low-level programming language, the everyone learns, every big tech company hires for, and has a huge ecosystem?

There must be better choices for writing high-performance code that is also nice to write and nice to look at.

C and C++ are standards, there are formal definitions.

Back in the 70s the idea was we would all learn C which would be portable across platforms. You can still do hat if you code properly . C allowed direct access to addresses in memory which could speed up execution. It is also like a shorthand. When you are proficient you can write code faster and use less lines than languages like Pasdcal and Basic.

Code size and complexity grew in proportion to speed and memory size. First there was spaghetti code. Unstructured code written off the top of the head with jumping all over the place.'Then came Structured Programming. Top down sequential execution, and self documenting code, variables and functions with descriptive names and comments.

AS code grew that was insufficient. On a group project you cold compile code abd link te roject, but code coud still jump around. C allows a pointer to be placed anywhere. Data one one section could e clobbered by another section. Pointers.

Along came OOP. In a C++ object private code and data can not be seen or hacked by other code. You create an object to do something with a public interface . If you have to change code in the object it is transparent to anyone using the object. It minimizes the chance of unforeseen side effects. On large programs a big problem when someone makes a change and causes a problem elsewhere.

If you are writing a few lines of code you would not see it. For 10s of thousands of lines or mire then you would.

Back in te 70s when a programmer left a company a company could be held hostage because nobody else could maintain the code.h

In the 80s when I lived in Portland Or the Beaverton telephone company downloaded an update. When they rebooted it crashed. Someone at the manufacturer took out a seemingly useless code snippet. Put it back in and it worked. Not uncommon back then.

With random bug fixes code became impossible to maintain.

C++ was an answer. You can still write bad code, but it makes it easier to write good maintainable code.


For routine apps MS has Visual Basic. You can download the free community version of Visual Studio.

You can search for a Pascal compiler if they are still around..

I definitely feel spoiled having entered the industry in the 10's. There was a steep learning curve to get where I am now, but truth be told I don't find my work that challenging anymore. If I don't know something the answer is on Google. If there is a bug I can use a debugger.

It's actually quite beautiful in that people can't just walk in off the street and do it (job security), but for me programming feels like breathing, effortless.
 
....For high-performance code, I recommend C++. It is backward-compatible with plain C...
BTW there's also Objective-C....
https://developer.apple.com/library...WithObjectiveC/Introduction/Introduction.html
"It’s a superset of the C programming language and provides object-oriented capabilities and a dynamic runtime. Objective-C inherits the syntax, primitive types, and flow control statements of C and adds syntax for defining classes and methods"

That used to be for iOS/MacOS programming but now there's Swift.
 
C++ seems like a really difficult language. I've written a little bit of C and C++ and even that was hard work.

Is C++ just popular because it's the standard, go-to low-level programming language, the everyone learns, every big tech company hires for, and has a huge ecosystem?

There must be better choices for writing high-performance code that is also nice to write and nice to look at.

C and C++ are standards, there are formal definitions.

Back in the 70s the idea was we would all learn C which would be portable across platforms. You can still do hat if you code properly . C allowed direct access to addresses in memory which could speed up execution. It is also like a shorthand. When you are proficient you can write code faster and use less lines than languages like Pasdcal and Basic.

Code size and complexity grew in proportion to speed and memory size. First there was spaghetti code. Unstructured code written off the top of the head with jumping all over the place.'Then came Structured Programming. Top down sequential execution, and self documenting code, variables and functions with descriptive names and comments.

AS code grew that was insufficient. On a group project you cold compile code abd link te roject, but code coud still jump around. C allows a pointer to be placed anywhere. Data one one section could e clobbered by another section. Pointers.

Along came OOP. In a C++ object private code and data can not be seen or hacked by other code. You create an object to do something with a public interface . If you have to change code in the object it is transparent to anyone using the object. It minimizes the chance of unforeseen side effects. On large programs a big problem when someone makes a change and causes a problem elsewhere.

If you are writing a few lines of code you would not see it. For 10s of thousands of lines or mire then you would.

Back in te 70s when a programmer left a company a company could be held hostage because nobody else could maintain the code.h

In the 80s when I lived in Portland Or the Beaverton telephone company downloaded an update. When they rebooted it crashed. Someone at the manufacturer took out a seemingly useless code snippet. Put it back in and it worked. Not uncommon back then.

With random bug fixes code became impossible to maintain.

C++ was an answer. You can still write bad code, but it makes it easier to write good maintainable code.


For routine apps MS has Visual Basic. You can download the free community version of Visual Studio.

You can search for a Pascal compiler if they are still around..

I definitely feel spoiled having entered the industry in the 10's. There was a steep learning curve to get where I am now, but truth be told I don't find my work that challenging anymore. If I don't know something the answer is on Google. If there is a bug I can use a debugger.

It's actually quite beautiful in that people can't just walk in off the street and do it (job security), but for me programming feels like breathing, effortless.

It is about efficiency and cost. There are tools that take scripted pseudo code and generate C code for different platforms. A guy I knew who sold financial SW paid around $0k for the package and $5k per seat. It enabled him to have one sw engineer instead of 3 or 4.

Knuths Seni Numdrical Algorithms covers the usual stuff like sorting, searching, random number generators. The general algorithms are well know. The book does not include current AI algorithms, Knuths Semi Numerical Algorithms covere just about all of the regular topics.

Places like Google and Amazon developed new AI, search, storage, and data base techniques that are proprietary. They are where the action is, so to speak.

MS VS provides low level functions for web apps and GUI creation. The challenge is not in the code, it is learning VS.
 
Back
Top Bottom