Tästä sisältöön

Confession

Bemused :lta, 28. helmikuuta 2015

Viestejä: 23

Kieli: English

kaŝperanto (Näytä profiilli) 2. maaliskuuta 2015 23.04.21

Bemused:
Alkanadi:I know some languages that are 100% rigid with no exceptions and no irregularities. You should learn Python, Java, or C++. Also, if you learn these languages there is a financial payoff.

I suppose you could also make up your own language. You could write a program that will automatically generate words according to your requirements. Also, you can dictate your own syntax and semantics.
Thanks for reminding me. Once upon a time I did learn a second language as part of a Uni course. It was called BASIC (Beginners All Purpose Instruction Code). It was a lot of fun and I ended up getting straight A's in all computing related subjects. But computing was not my major and so it fell by the wayside.
I'm guessing that by now BASIC would count as a dead language malgajo.gif
I looked a Java once and it seemed to consist less of actual composition and more of gluing together prewritten pages (what we called subroutines in BASIC) but they had some fancy new name to disguise the fact that nothing original was being generated, it was just shuffling around old components to create new products, like building something from off the shelf components.
That is an understandable but deliberately pessimistic view of software engineering. As much as I enjoy bashing Java, I understand it is a tool for the engineering of software, which requires one to "glue together pre-written pages" more often than not. Modern programs are far too complicated for even a large team of engineers to do everything from scratch, let alone for one person to do that. Abstraction and simplification of a problem into (potentially-reusable) components is absolutely essential for real programming. If you don't do these things (even when going it alone) then you are writing bad code, even if it works perfectly.

On the programming note, pretty much every programming language is not nearly so perfect as you think. After all, even the most irregular natural language can be codified into a set of rules that a computer can follow. What we mean by that in these circles is that there are no rules with exceptions that don't make logical sense.
In teaching how compilers work they talk quite a bit about "context-free grammars" even though no real-world languages can be described as such. Even C, one of the simplest languages, is not context-free, but it is somewhat close in theory (incredibly un-close in practice).

Other, more perfect/inspired/pure languages sometimes even involve more contradiction to do meaningful work. Pure "functional" programming languages require highly academic and mind-numbing abstract concepts to do simple things like read user input from a keyboard, read data from a file, or print "Hello world" on a terminal screen. The benefits of using a "pure" language far outweigh this inconvenience (or so I am told). Monads

deltasalmon (Näytä profiilli) 3. maaliskuuta 2015 0.08.07

kaŝperanto:

That is an understandable but deliberately pessimistic view of software engineering. As much as I enjoy bashing Java, I understand it is a tool for the engineering of software, which requires one to "glue together pre-written pages" more often than not. Modern programs are far too complicated for even a large team of engineers to do everything from scratch, let alone for one person to do that. Abstraction and simplification of a problem into (potentially-reusable) components is absolutely essential for real programming. If you don't do these things (even when going it alone) then you are writing bad code, even if it works perfectly.
Isn't there a phrase about reinventing a wheel?

kaŝperanto (Näytä profiilli) 3. maaliskuuta 2015 23.25.51

deltasalmon:
kaŝperanto:

That is an understandable but deliberately pessimistic view of software engineering. As much as I enjoy bashing Java, I understand it is a tool for the engineering of software, which requires one to "glue together pre-written pages" more often than not. Modern programs are far too complicated for even a large team of engineers to do everything from scratch, let alone for one person to do that. Abstraction and simplification of a problem into (potentially-reusable) components is absolutely essential for real programming. If you don't do these things (even when going it alone) then you are writing bad code, even if it works perfectly.
Isn't there a phrase about reinventing a wheel?
Exactly. It is very easy to fall victim to the rock-star programmer nonsense and reject anything "not made here", but you are shooting yourself in the foot in doing that. While you're writing your own TCP/IP stack there are complete amateurs using platforms such as Arduino or Raspberry Pi to automate their homes. They may not know what they are doing, but if you never leave the drawing board who cares if they duct-taped their solution together when you have nothing to compete with them?

If you want a good example of a person/genius who always writes his own code from the ground up, google Chuck Moore (the inventor of the Forth programming language). He has not only made his own language, but also designed his own microchips, using Computer Assisted Design software he wrote himself (in Forth), to run Forth (on actual hardware at the hardware level). In the Forth community to this day there is a strong DIY mentality, which is partially a result of how that language works, but I'm sure largely inspired by its creator and those who learned from him.

Takaisin ylös