mrbadger wrote:kohlrak wrote:
You let programming students avoid command line programs?
Any student who has made it to the final year and still managed to have so little talent with programming that the terminal is a serious challenge is not a student I can fix in a semester. in all honesty they are someone who will likely never be a coder after graduating.
They have other issues, such not really wanting to be coders in the first place and only being on my module because it has no exam. Why that would be appealing I don't get, to me it would scream
hard as f$%k avoid, but I from what I tend to see they just try to blag any form of pass.
I get kids like that year after year, which is why I have a route through for them. That way they don't take up all my time.
They can have their reduced grade pass and be happy with it, and I don't get emails from morons demanding a first because it was really hard for them.
This is terrifying, and this is precisely why employers are looking for tests.
Morkonan wrote:
kholrak wrote:Because alot of programs loose functionality when placed into a GUI.
Then they're not optimized for an end-user using a GUI, right? Then, that means, they're not the sort of programs you'd want with a GUI. Probably not for most of the uninitiated...
These programs should be, though. The large amounts of "gui-wrapper" programs that exist, including ones that are out of sync with their command line tools, says enough. While not all the features of SSH are for everyone, it's pretty useful for people who want file sharing without all the insecurities that come from SAMBA, or trying to struggle with something like skype. And the ability to forward x-server is pretty useful for certain types of work environments, too (nursing homes, hospitals, etc, which aren't using the technology [even using less secure technology] because they're not even aware it even exists, let alone how to use it). I saw someone here on the forums using GIT in a really old post for managing their saves or something. Do you know how many people could benefit from GIT for school reports, for example? That should be a standard tool for everyone, and is more useful than microsoft word which actually comes pre-installed. Businesses alone could benefit from the ability to backup spreadsheets and stuff. And that's just the tip of the iceburg. Making a GUI for these kinds of tools should be an absolute slap in the face to anyone who would use them.
Alot of programs can be better chained together when you don't have to take output from one program and copy and paste it into another.
Well, if I have a "suite" of programs, designed to work with each other, even though they each specialize in different things, or are better in certain
appapplications, then I may not have to copy and paste. I just add the appropriate field to my Word doc and it'll lookup the value for me, no problem. It'll even update it when it changes! Except after I print it... That causes it to break the program an' it won't updated it nomores.. /idiotuserbugreport
What if they're not designed to work together, but simply do? Here we go back to "grep" again. I'll take a very specific, quick example. I have this 100KB file full of documentation on the accent patterns of 大阪弁, as well as an index to a file with a native person from 大阪府 saying those words. It is a simplified database that I came up with on the fly (probably could've moved it into a database, but let's assume for a second that i'm not that computer smart). Easily takes a few minutes to open up in any given GUI program. If I'm tapped for time, or just don't feel like waiting those 5 minutes to make sure I got the correct accent pattern for the word (since there's no point in storing it for every card in Anki), I can just open a terminal (takes less than 5 seconds) and type in a quick command, and then get this output.
[kohlrak@kohlrak-server ~]$ fjw 暗記 #Find Japanese Word
暗記-H*0
There, I managed to look up the word 暗記, and realized that I have a natural tendancy to incorrectly pronounce it with the HHH pattern when it's pronounced with the LLM pattern. Some times i won't need it. Sometimes i need it for 3 or 4 words. I made that small script because I got sick of turning a 5 minute task into a 30 minute task. This is something someone who's studying Japanese would likely do if they're worried about having the correct pronunciation of words.
Code: Select all
function towav {
ffmpeg -i "$1" "$1.wav"
}
function tomp3 {
ffmpeg -i "$1" -acodec libmp3lame "$1.mp3"
}
function toogg {
ffmpeg -i "$1" -acodec libvorbis "$1.ogg"
}
Sure beats waiting 5 minutes for another GUI program with a splash screen to load. Better yet, I could easily convert these to convert entire directories. A similar practical situation I had, was I bought the entire series of a radio show. The first 100 disks were audio disks (
松本人志の放送室), while the remaining were MP3 data disks. I wanted to coherently put the entire thing on a USB drive, and stick it into a cheap 15 dollar MP3 player, and know what track number corresponded to what episodes, without having to cross reference a printed sheet (actually, multiple sheets) of paper that said what track was part of what episode. Basically, the solution was to take the first 100 episodes and merge the tracks into a single MP3 file. Lemme know when you find a GUI that can solve these kinds of problems, because unique and special problems are regular occurence for people, and then they either have to make due with some ridiculous solution or settle for not having what they want.
... I've actually taken the time in trying to simplify the hello world, because it really is way too complex in most languages to not scare people away. "You have to do all that just to put a message on the screen? Hell, what's next? An essay just to ask someone what their name is?"
I am uber coder. Write uber code. Most famoustest of codes is "Hello World." Can do better than prn scrn an' echo!
Hello World
Tada!
/serious
Ah, but say you're trying to learn a language like Java or C++. Now you have to explain #include, int, main, the empty parenthesis (and why it's absolutely necessary, without them thinking suddenly that now they are doing something with absolutely no purpose), then why we have {}s, followed by why we have to use either "std::", "using namespace std;" or "system.out.println" or any other combination. Finally, you have to explain why we have to return 0, which has to do with command line, which most students aren't even aware of. What often results is "we have boiler plate code, we have to do things this way, so trust me, don't think for yourself on this, but i'm gonna demand you think for yourself later." See the challenge, now? It's no surprise that programming confuses people. Basic's pretty impractical anymore. Surprise, though, as visual studio and visual basic mixed together made it so that you could design a GUI and trust that when you double clicked the button, that the code the compiler added was totally relevant. Even if you didn't understand it and come to the conclusion everything's magical (hence why so many VB only coders have trouble making a program that doesn't crash), at least the core of the lesson isn't a contradiction. It's no surprise why so many people freeze when you tell them that maybe they could code without visual studio's "new project" commands.
Now, if you can get them coding (with a real, currently living and breathing programming langauge, that can make a program that doesn't need an interpreter or something) with minimal or no boiler plate code, you can be consistent. For the educators out there, i have a few working examples that are improvements, but you won't like them, and they don't completely solve the problem. But there's the rub, the langauges that can pull this off are usually languages that need interpreters, and are more or less toys or scripting engines, and can't do everything people want or need them to do, so then they ask why they're learning something useless.
A coder, somewhere, wen to a great deal of trouble so that I could type on a keyboard and pixels would light up in the shape of the letters that I typed. The above is the "user" example of "Hello World." I didn't have to type more than the number of letters in those words, no matter what was going on in the "back end." And, arguably, I can do much more with the tools the coder gave me than any regular codemonkey given the same amount of time. I can make it in italics, bold, underline, put it in a list, quote it, put it in a codebox, insert it into an url description, change the colors of the letters... ALL of those things in a matter of seconds. Gime some <blink> and we'll have a field-day!
There's the separation. You have the coding necessary for the common person (who knows none at all), and you got the coding for the programmer who wants to do it all (who ends up learning one of those languages designed for the common person). Sure, there's people who actually do learn and learn real programming languages, but we baby and nanny the students so much that too many just don't learn. Then you have employers who are like "we can't find talent, even among those with degrees! What do we do!? We need a way to test to make sure we're not wasting our time and money!" Yeah, that's precisely where we're at.
I don't need to know how to write the short, brief, easy, code to make the screen print out "Hello World." I'm doing it right now and, moreover, I can go "beyond" that with how I use the power the coders gave me. I can use this new tool for things other than "computer" and other than "computer stuffs."
Cool. Need a golden star?
Sure, learning things is great and people should, if they can, know more about the tools they use. A professional, who uses tools in their profession, often knows a great deal about them. But, they don't need to know how to create those tools in order to use them with a great deal of skill, nor should they be required to.
So, in the real world, the tools break and they don't know how to fix them. They have to wait for "maintenance" to come and do something as simple as rebooting half the time. My personal favorite is when they outsource the tech support so a guy drives from another state (in the US) or another country (in europe) just to solve a problem where items in the menu are no longer in alphabetical order because they clicked the header of one of the columns. And if you think something like that is rare, well...
Chips wrote:I cannot disagree with you more. Programs in high level languages are, essentially, in natural "English". Also, assembly != machine code. Look up a hello world example in both, massive difference in readability and understanding. Baffled by the claim to the counter, unless it's a "I'm really awesome" type posting?
Taken from an examples file from
Flat Assembler:
Code: Select all
; example of simplified Windows programming using complex macro features
include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
invoke ExitProcess,0
.end start
And, yes, with a simple include file, it can be made even simpler, as it uses a MessageBox with an OK button instead of, say, printf.
mrbadger wrote:I quite enjoy programming in assembler.
That said I wouldn't use it for anything but small functions whose operations I want to control such that they are as fast as I can make them.
even then, if the function is a complex one I tend not to write the thing in assembler. I write it in C, compile it into assembler and hand optimise that.
However there is some debate as to whether it's still worth doing that, compilers are getting pretty good at optimising.
So it's down to fun for weirdos like me, and only really necessary for Console platform developers who need to speed up games when the hardware hasn't changed.
I'll give you the optimization argument. 5 or 10 years ago, I would've said differently, but the last time i looked at the optimized output, it's come far. I've seen compilers come up with the dardest outputs. I've heard of visual studio using jump tables or something for switch statements, and i've personally seen GCC read a variable from memory and a few lines later writing the same variable back to the exact same address, without any modifications (that's how it handled memory allocation for functions).
Morkonan wrote:mrbadger wrote:Nanook wrote:Why should an artist, a lawyer, an architect or a mechanic, for example, know how to code on a computer? .
They should not. But you've hit the main point, a software developer, or at least as good one, needs to be capable of becoming a toolmaker for any one of those professionals.
Further, those tools need to be easy to use and maintain.
At the start of any developers career they need a decent understanding of the basic tools of their craft.
...
That's the essence of a "professional." Specialists may not need extensive knowledge outside of their particular field - That's why there are other "specialists." Still, they need to know enough about the things that are intimately associated with their profession in order to do "a good job."
Coders should be "professionals." Many are. And, does the mechanical engineer using Matlab to design a new joint need to know how to code "computer?" No. But, they may need to have extensive knowledge of Matlab, since that is the tool they are using.
What i want to know is why a particular professional can't generate a simple script on their own without paying a programmer to do it for them. Why are we still hiring people to make static web pages?