/tech/ - Tech


Mode: Reply

Max message length: 8192


Max file size: 80.00 MB

Max files: 5


(used to delete files and postings)


Remember to follow the rules

(9.98 MB 650x345 serveimage.gif)
Comrade 02/11/2020 (Tue) 23:20:05 No. 162
I made a mild college CS alarmist post today on /leftypol/ and was asked by a student for advice on what to avoid in school. I'm well aware of how contentious programming can get, often with people disagreeing on what even constitutes fact vs. opinion, so feel free to argue against anything I say or provide your own advice to any potential CS students. Disclaimer: If you want to be a web-dev, none of what follows is applicable. Offer up your soul to the mad gods of JavaScript and prepare to live out your days in unspeakable agony. Here is my generalized advice in terms of CS: take any class that is focused on implementation rather than theory. Theory is also very important but it is absolutely useless unless it relates to your actual programming experience. If you are not being assigned large or challenging projects, make your own. Things to avoid or be skeptical of: - You are primarily being tested on pen-and-paper. The only time programmers have to write algorithms without a debugger or at least a console to print to is in job interviews. You can fail every single test in algorithms class and still be a boss programmer. Tests like these are more akin to Math exams where you must provide proofs. - You are being force-fed OOP (Object Oriented Programming), either by an academic ideologue or simply by virtue of using Java which basically forces it. OOP in programming epitomizes "ideology" in Zizek sense, it's an abstract model adored by academics who don't write code for actual users because of its perceived elegance and simplicity. However, real-world code ALWAYS has to deal with reality's messy edge cases, which renders any OOP code into a nightmare. There are about a million other reasons it's bad, there are many good lectures on YT. - Dynamic languages. If you have never programmed you might not even know what this means. Some examples include Python, JavaScript, Lua, etc. These are good for very small applications, like scripts, support tools, toy programs, hobby use, etc. The problem is that they can often be slow, and generally let you make fatal mistakes that you won't even know about until you actually hit the bug in testing. Compiled languages (C, C++), on the other hand, have a huge amount of rules that the programmer must obey before they even run the program. If all the rules are satisfied, the compiler translates your code to a fast, efficient format that gets directly executed by the cpu. This ends up saving an enormous amount of time by catching mistakes before running the program, and it produces a faster result. You should ultimately learn both dynamic and compiled languages, but only the latter ultimately leads to enlightenment. And FOR GOD'S SAKE if you are making a large, non-trivial project, make it in an actual, compiled language. Things to do: - Figure out which direction to go in. Programming has an almost unlimited array of applications. Eventually you will have to specialize to a certain degree. - Learn how to read code. This is brutal at first and only comes with time, but eventually you will learn how to. Whenever I find something interesting on github, I poke my head in and see if I can get any good ideas, or just observe how others solve the same problems I have. - Learn a god-damn text editor. I use Vim. It's horrible at first, then it's pretty nice, then it's great, then it becomes part of your being. - Be optimistic. Yes, I know, this sounds retarded, but hear me out. I knew before I ever started programming that it absolutely MUST feel amazing to be a really good programmer. I still have a lot to learn but these days I can tackle most problems that come up without consulting the internet and holy fuck does it feel good. And finally, the ultimate programming mantra: Keep it simple. Resist the urge to over-design, over-architect, over-generalize. A program is a tool for completing a task: start with the absolute bare minimum and add as necessary. Abstractions always have cost: the only things that really exist are functions and the data they read and transform. And when you ascend to metaprogramming, you will see that functions are data too. PS if any of you are gamedev gang, this is the ultimate, painstakingly detailed resource available: https://www.youtube.com/user/handmadeheroarchive/videos
repost: My uni had a shit ton of shit about UML, processes, requirements, and other shit that's not really used IRL. Including a class from a religious nutjob who idolized Watts Humphrey and his methods, especially PSP which literally NO ONE in the industry uses that, not even the terrible indian firms afaik. We also had very shitty clases on core concepts which were barely introductory. In our web dev class, the professor programmed a shitty website using JSP (a 90s framework from hell that literally no one except third world banks use it), editing code using Microsoft Word. That is such a huge huge no-no and illustrates the level of knowledge these fuckers possesed. We had very little core cs classes, they were basically all shit, some classes I got 90+% playing games or watching movies all semester. I got 100% in at least 2 classes, I'm neither smart nor motivated. I've had a successful career though. Major keys for corporate success: -Go to every hackathon -Compete in ICPC type competitions -Learn programming on your own time as soon as possible -Investigate CS theory topics on your own time -Apply to internships every summer (obviously Big Tech, but also try smaller companies, internships are very very important. ICPC type competitions and hackathon attendance will make you a better candidate). But by fucking far, the most important thing is to not burn out. Consider taking less classes if necessary. Nobody gives a fuck about grades, work experience + icpc type experience reins supreme. And job interviews are super subjective, don't get discouraged, apply again to all.
>>163 Good advice from a different place. In all likelihood the original poster who wanted advice will have a similar experience to yours. I was lucky enough to have some actually good classes at my school but most students won't even have access to 1. So yes, make your own curriculum, the resources for learning on the internet today are vast. Try to go for what looks the most rigorous and challenging.
Your first world college CS experience is eerily similar to mine, but I went to a literal third-world degree mill for "informatics engineering". From OOP worship to being forced to use that demonic trashheap called JSP, and 75%+ of the curriculum being UML garbage instead of anything of actual use.
I saw your post on /leftypol/ and as another CS graduate was interested The only thing I disagree on is the emphasis placed on warning against dynamic languages. Feels dogmatic. They really do have their use and as a beginner they will learn their strengths and weaknesses through practice anyway. I'm guessing this warning might be motivated against JavaScript specifically and how it's used in webdev. The school I went to really emphasized implementation and coding with a variety of different languages over theory and I've heard in other places that this is bad because it doesn't teach you the real CompSci concepts. But we did go over some theory like several math classes (very useful) and the chomsky type stuff about formal languages and state machines, I forgot most of that logic shit already. I guess if you are not going for a phd it doesn't really matter. I'd say the classes that were most useful were algorithms and data structures, operating systems, databases. OOP really does suck.
>>166 >Dynamic languages Yes, I was perhaps a bit heavy-handed there. What I mainly wanted to warn against is using these languages for anything large, or fast, or even secure. For example, I know that the scientific community is massively biased towards Python, resulting in huge suffering from using the wrong tool for the job. At any rate they are good for getting your feet wet, and like you say, the student will learn the relative merits on their own.
>>163 Sounds like a really bad program if you ask me. I mean my school is a mixed bag. They did push object oriented programming in the intro and intermediate programming classes. However many professors are well known for calling object oriented programming shit and tell us it's a requirement for them to teach it to keep accreditation. They really didn't care what programming style you used the other classes I've taken. Since we use C++ in most classes you can just write functions if you don't want to use objects. I've never seen a professor write code in Word or teach stuff from the 90s. Our web development class uses a python web framework. Most of our core programming classes use C or C++. Our university has been teaching computer science for longer than most schools. There is no separate program for computer science or computer engineering as a result. So the degree is a hybrid between the two. So we have to take a lot of hardware and electrical engineering classes and the program is certified by the IEEE and ABET. The biggest problem I've had is there are a lot of professors that are lazy, terrible lecturers that read off power points provided by book publishers. The actual material itself is pretty good when you study it on your own time. The electrical engineering professors and math professors are a lot less lazy and rude than the computer science professors. Who tend to all be asshats who are terrible at explaining even the most basic concepts. They're qualified they just would rather be researching than teaching classes and it shows. TL;DR: Material is good professors are arrogant assholes. Since employers don't treat programming like an engineering fields a lot of universities don't bother getting accredited and have shit outdated programs like what OP is dealing with. My program sucks but definitely isn't as bad as his. My advice for people (in the U.S) looking to get a CS degree is to find a school with abet or IEEE certification because they have to teach the bare minimum to keep their accreditation.
- once you learn C and C++, learn Rust
>>169 dilate
>>170 if you care about this >Compiled languages (C, C++), on the other hand, have a huge amount of rules that the programmer must obey before they even run the program. you'd agree with me
(375.19 KB 1200x1100 1400983303127.jpg)
My advice is to learn how to notice people who are full of shit. OP is a good example, every advice of his is pure meme. To get the most out of your university program, do the opposite of everything he says. - Learn as much theory as you can. It's what you will actually use at work. Practice will come naturally but it is much harder to master new fields of theory once you are working full time. Ridicule intellectually lazy people who want to turn universities into corporate job training. They are your enemies. - Proving is the highest form of mathematics and exams involving it are the best way to measure your understanding. What's the point of knowing that something is true if you don't know why? Programming is not about computers, and if you are unable to write a coherent program without the aid of a computer, you will forever remain an imbecile. Protip: they won't fail you because of a mismatched parentheses. - OOP is the widest used programming paradigm today and is neither better or worse than any other paradigm. It's just different. Take a non-dogmatic approach to languages and use the one best matching the problem domain, instead of this bullshit hipster tribalism. - Actually learn your languages instead of repeating cargo cult bullshit about "big boy languages" like C and C++. In what sense is C strict to programmers? Half of the specification is about undefined behaviour, the rest is implementation defined, not to mention the retarded automatic conversion rules or the fact that you can just cast whatever bullshit you want. What the fuck is a dynamic language anyway? SBCL can compile Common Lisp to machine code, where does that fit in your infantile worldview? - People like to cry about UML being bullshit but when we gather around to tackle a tough problem, it is still what naturally ends up on the whiteboard. Like it or not, it is a visual lingua franca of program design and even if you don't conform to the standard, you will end up using a pidgin version of it. Actually, the most important advice is to read SICP and use emacs. Everything else will fall into place after that.
>>168 > I've never seen a professor [...] teach stuff from the 90s. You were cheated out of your education. It's baffling to me that on a leftist board people would be so hostile to study history. Any topic we studied we would go through its stages of evolution, studying how it used to work, why was it made that way and why did it get replaced. There's no point in learning Cisco's current software or the latest NodeJS web framework, that won't turn you into an engineer.
>>172 Uninformed peasant here. You rail against "meme advices" from OP but SICP looks to me like the ultimate meme advice ever since I came across it on 4cuck /dpg/. Can you explain to me why is it good and valuable?
(127.92 KB 1280x720 1378541603278.jpg)
(163.54 KB 465x881 bscs.png)
To any of the young people reading this, please take all the advice in this thread with a grain of salt (especially OP which other devs here have pointed out is full of it). I’m a software engineer with industry experience and an advanced degree as well. I can tell you the vast majority of the opinions on software dev you find on bunkerchan are either religious/opinion based or just flat out uninformed bullshit. It’s pretty clear from reading /roulette/ and /hobby/ that the vast majority of people here offering opinions (with a few exceptions) are either college students or hobbyist programmers whose opinions are based on writing pet projects in non industrial contexts while they work their day jobs at the mall and browse /g/ on the weekends looking at Stallman memes. Unlike a lot of people in this thread I actually feel that my school, despite being a regular state school and not being Stanford, actually did give us a pretty challenging and good education. Yes there was the obnoxious proof writing and hand written tests but there was also quite a bit of applied stuff as well. I’ve attached an example of what a normal undergraduate degree in Computer Science is supposed to look like (from an average school) (mine, but I removed some class numbers and other info as so not to dox). If you want to go to school for CS it is definitely worth it, as long as the program is decent. If your class list/requirements look less rigorous than what I’m posting here, you may be at a below average program. That’s OK, but you need to study more on your own as well as do the things people here have suggested (hackathon, internship) and also grind leetcode DS/A problems. No matter what school/degree you go for, you will have to self teach yourself a lot of stuff. Theory and math can be boring but you should take those classes since you will have to self teach yourself technologies related to whatever job you get anyway (and your school probably won’t have classes on specific modern technologies). Companies know you are a junior dev and need some mentoring (if the company’s good, they will hold your hand for the first 3-6 months minimum anyway). Most people don’t really fully become qualified programmers until at least 1-2 years in, TBH. On the other hand as other anons pointed out, this is basically your last chance to learn theory and math. It it supremely difficult to teach yourself those more technical/obscure subjects without someone to check your work, especially when it comes to proofs.
>>173 >It's baffling to me that on a leftist board people would be so hostile to study history. I meant outdated framworks like he was talking about. No every class I've ever taken has background history and since again it's kind of a hybrid degree we usually go to a lot more low level details then other schools make you. In our database class we learned about the historical database models, then we learned about relational algebra, relational calculus, ER diagrams, Three Schema architectures, how databases are implemented on raw disk. The various methods of storing and indexing databases, how to use memory hierarchy to improve performance, using relation algebra to implement distributed databases. We only started using SQL to build a large database in the last month of class. Even then we didn't just get right into programming. We had to make an ER diagram, prove that the database was normalized, and write out what we wanted to do in either relational algebra or relational calculus before we implemented them in MySQL. It was one of the smoothest programming projects I've ever had. I followed all the steps in order and. I had to do virtually no troubleshooting ,or debugging. We displayed the database using PHP.
>>172 >Actually, the most important advice is to read SICP and use emacs. Everything else will fall into place after that. I agree it made my discrete mathematics and algorithms course a breeze.
>>176 Just curious, do you still work around where you went to school? Are there tech industry jobs there?
>>179 My first job out of school, I ended up working at local company, but I have since moved away. there aren't very many tech jobs (just a few). Most people end up moving away for work anyway regardless of field
>>178 So what the hell is SICP?
>>172 >SBCL can compile common lisp to machine code >what the fuck is a dynamic language SBCL's runtime checks if said machine code should be executed or not during execution so it's dynamic language
>>172 >Programming is not about computers No, but you can't program without a computer, can you? Even abstract programs are made to be run by abstract Turing Machines. Programming and computers are fundamentally linked. Nice word games, tho. >>174 SICP is well worth a read but you can obviously see his post is filled with meme-tier LARPing. >>176 Agreed with almost everything here. Make your own projects based on what you're interested in. People hiring will be far more impressed by completed projects than by your diploma. And for the record, even though I used C and C++ as examples of compiled languages, nowhere did I shill for them in particular. C is ancient and profoundly flawed and C++ is even worse but they are still often the least bad tools for the job. I was just expounding on the joys of having a compiler, that's all.
>>184 I can program without a computer just fine. If you can't, you might want to look for a new career path.
I think this might be a good thread to ask this. So I am just a few months away from having to decide what university course to choose. I am mostly certain I will be able to quire a government-sponsored spot in most of the ones I am considering, however I would like some advice on which might be the best. Basically there are 2 perspective tech courses and the more general math one, so I would really appreciate if you could give me some advice. The following course is the one I've heard was supposedly more promising, or at least the one that usually attracts better students and has better teachers (I will try to post other courses as well later, don't have time for all of them now): Information system engineering <1st semester: -Information and group work systems -Computer architecture -Math for information systems -Procedural programming <2nd semester: -Algorithms ad data structures -Discreet math for information systems -Database control systems -Object programing <3rd semester: (must) -User connection creation -Requirement engineering foundations -Business process modeling (choose-able from database group subjects (I think 2 are max)) -Blockchain tech -Database designing -Database query languages -Non-relational(?) databases <4th semester: (must) -OS -Methods for optimization -Statistical data analysis methods (choose-able from business group subjects) -Project management -Marketing -Management foundations -Business analytics -Business process robotization <5th semester: (must) -Information system creation project management methods -Computer networks and high-performance calculations (choose-able) (Data analytics group) -Big data(?) analytics -AI foundations -Data analysis and visualization -Natural language processing (Database group) -Work-based blockchain tech -Database designing -Database query languages -Non-relational(?) databases (System creation and programing group) -Architectural program system styles -Smart device programing -.NET platform systems -Project templates -Script programing <6th semester: (must) -Informational system testing and care -Virtualization and cloud computing (Choose-able) (Data analytics group) -Big data(?) analytics -AI foundations -Data analysis and visualization -Natural language processing (System creation and programing group) -Architectural program system styles -Smart device programing -.NET platform systems -Project templates -Script programing <7th semester: (must) -Informational safety foundations -Studying practice (informational system engineering) -Program system quality (choose-able) (System creation and programing group) -Embedded system programing -Reactive programing <8th semester: (must) Bachelor graduation project Professional practice (Informational system engineering)
>>186 Computer Science / Informatics > Information Systems * > math etc. Getting a general math degree only qualifies you to be a math teach, you will essentially have to teach yourself dev. The degree you posted looks good, id take that any day over a pure math degree UNLESS you want to go to grad school for CS (PHD) and do research in which case the proofs, etc of a pure math degree might be helpful. But if you want to go to work, try something applied
>>186 Is this in Europe? A degree like this is usually called information systems in the US. You usually don't take very many business classes for engineering degrees in the US. In my program I don't have to take anything to do with marketing or economics. I've noticed a lot of European countries make no distinction between IT and Computer Science.
>>163 Oof, re-reading my advice, I double down. If you are unfortunate as I was and had to go to a school with a crap program, definitely do this. I'm from the third world and get job offers from Big Tech. I've heard great things about SICP, but I haven't read it myself.
>>186 This program looks pretty damn good, anon!
From a programmer: Don't become a programmer. The only fun stage is the initial stages where you start planning but the actual work and problems you run into later on are stress inducing, you can never achieve what you want, you can't do something "good enough", all your mistakes catch up on you. Programming is hell.
>>186 Damn, that's an easy cource. In my uni there's a lot of hard math and telecomms, which are very hard. Also i notice that it doesn't have many network related classes or many math related ones.
>>176 Suddenly started sweating when I realized my university course has had little to no maths until now. We did a bit of sets and relations and some combinational logic but nothing like your curriculum. I might be misunderstanding though, are the "related requirements" section pre-university? If so I did all of that and more in high school. Some days I wish I was doing a maths major instead. I'd post my github but I'm new here, not sure if bunker-chanians are OK with light-doxxing lol.
>>558 related requirements are courses from other departments that you have to take but are required for your degree. The calc 1/2 and physics 1/2 could have been taken either in college or AP (high school) if you're a burger. IF you're a european then you likely learned those things in secondary education except for some of the advanced classes like linear algebra, diffeq, and calculus-bases prob/stats. in real life programming you rarely use that stuff anyway outside of very specific things in machine learning or 3d graphics.
>>455 kys >>162 I've been wondering if I should learn something like discrete math on it's own or is it something I'll learn as I program and learn algorithms and datastructures?
>>172 Best post ITT
Third year CS student from a country where you can mostly study on benefits/cheap loan, so I don't really have a hurry to get out of the institution. I have just taken some nice and interesting courses here and there, also some of those necessary courses that you need to get that sweet toilet paper. Algorithms/datastructures (now starting advanced puzzle course on that), databases, automata etc. are in the pocket, so is some math such as logic and linear+abstract algebra. I couldn't give two fucks about getting some dead end job at a consultation firm, and I hope big tech burns down. Yeah, I do Haskell Rust Tail recursion, haters
>>7008 I use Kakoune as a text editor and Arch btw also autism + some sort of attention (((deficit disorder)))
>>7008 The advanced puzzle course regarding data structures and algorithms has been fun so far. Difficult for sure, and it takes time, but I think it's worth it in the long run. I have also enjoyed talking about and slightly competing with two friends regarding the tasks. One of them is finishing Master's, both are working and seething over the good screen/bad screen duality, since they too enjoy the course. Do what you like mayne, and if you don't know, what you like, then at least try. If you don't like something, it's time to reconsider. your values.
>>162 This is such a uniquely abhorrent post that I must respond. >take any class that is focused on implementation rather than theory Terrible advice. Shit like Youtube tutorials, StackOverflow, reading actual source code and manuals teaches you implementation (and your youtube suggestion is quite good). College is a unique opportunity to learn abstract theory that can be more difficult to grasp on your own. I wish I had studied more theory in college and am now studying it on my own instead. My job and personal projects give me plenty of "implementation" training. >You are being force-fed OOP (Object Oriented Programming), either by an academic ideologue or simply by virtue of using Java which basically forces it. OOP in programming epitomizes "ideology" in Zizek sense Sure, sort of... >it's an abstract model adored by academics who don't write code for actual users because of its perceived elegance and simplicity Nope, academics love FP, not OOP. OOP isn't terrible even if Java is mediocre (see: Smalltalk). One of the fundamental problems of software design is extensibility, and OOP is one such answer to that problem (and a far superior answer to C-style modules, although probably not as good as FP). The real reason OOP is taught in colleges is not because "academics adore it," but because they're patronizing and think undergrads are too stupid to understand code without anthropomorphizing the entire field. However this doesn't diminish OOP's ability to create extensible software, whatever imperfections come up along the way (the diamond problem, overly-complicated class trees where object composition would be superior, etc.) >Blah blah dynamic vs compiled and "only the latter ultimately leads to enlightenment" Enlightenment comes from reading theory and examining the (often complex) architectures of real-world projects, not CS101 knowledge on what a compiled language is. Basically I agree with >>172 except UML is still bullshit. The general idea of boxes and arrows is fine and there's a reason you "end up with a pidgin version of it", but the software industry is full of grifts around paradigms, design, and workflows, and UML is one such grift.
>>7070 How is UML a grift? It's just a common language. I don't think you can even get certificated in it or some bullshit like that.
this thread is dope
>>455 Ah. To me that feeling was long-lived, until you realize you are just climbing your second, third, fourth, mountain of understanding. You will never reach programming nirvana, you will never make a perfect abstraction. The journey is the destination, ascending, descending into the depths, only to ascend again. To think any other way about it brought me great pain, you do not have to feel that way :) To add my 2c. WebDev can lead you into many places, if you're a visual person it's a good place to start. Write your APIs using Golang or another strictly typed language with good concurrency. Design your architectures with the cloud in mind, think about redundancy and auto-healing capabilities, what makes your program fault tolerant? Before you know it you're systems programming.


no cookies?