Comment on: What tools or techniques do you use to come up with estimated time of software development?
3 02 Dec 2016 15:35 u/omegletrollz in v/programmingComment on: What tools or techniques do you use to come up with estimated time of software development?
That is a good technique for short projects yes, very interesting but it is unlikely to work if you're developing as a team with complex prerequisites and orders for tasks of various phases (architecture, testing, etc). Not that it can't help but it just seems really simplistic to tackle this sort of scenario.
Finally, it is pretty much worthless for long-term projects. If you even go to the trouble of chopping it all up into day-sized chunks, you'll still come into the scenario, most likely that the client will ask for some changes or someone gets sick, or you find out that a certain piece of the code isn't going to run fast enough or support some of the later tasks in a good enough way, leading to rework. This is why there are scores of books written on management for large projects. It really isn't that simple.
Comment on: What tools or techniques do you use to come up with estimated time of software development?
Now do the formula for determining C xD
Comment on: Do you expect computers to move to a 128-bit architecture during your lifetime?
I've never heard it mentioned before and I think that if it was a real possibility some processor producers would have jumped into it already instead of allowing Moore's Law to be bent recently and most likely broken in the near future. I hear a lot more talk of quantum computers and I think there are already practical projects put in place. This is only my uninformed view but I guess if there is a breakthrough in quantum computing it will render 128-bit processors obsolete even before they become commercially available.
Comment on: Should I start learning Angular 2
I could vouch for Angular 1 but 2? It has become something very different, a lot bigger in scope. The first version was a cool hack to change the paradigm when writing webpages. The new one is a full blown framework and it's hard to see a direct evolution path between the two, which makes me confused and suspicious
I'm not saying that I don't like it. Really, I haven't learned as much of it than of the original so the best I can say is I don't know but if it became a framework instead of a library I'll make sure to learn about other more established, mature options out there instead first. Also the fact that it largely depends on Typescript, which probably won't ever be supported natively by browsers puts me off. It really changed a lot from the Angular I knew and loved, to the point I just don't know it anymore
Finally, to be a full-stack developer you don't have to learn Angular necessarily. There are tons of other options out there for front-end. some of which have been mentioned here already.
Comment on: I found an alorithm that produces a puzzling pattern (video)
I think of it like more of an experiment/simulation than a visualization with mostly aesthetic purposes.
Comment on: I found an alorithm that produces a puzzling pattern (video)
what you think about it
Nothing special. If you take a look at the xscreensaver package and related ones like xscreensaver-gl and xscreensaver-gl-extra you'll see there are many algorithms that produce interesting and unique patterns. projectM is the same but applied to music visualization - based on the much older MilkDrop project, which had thousands of visualizations developed over the years.
My point is there's nothing abnormal in your videos except the human mind being greatly interested in trying to make sense out of random patterns and the human spirit liking to look at those oh-so-satisfying, slowly-evolving abstract animations. If you think that is something you'd like to continue working on I'd suggest taking a look at those cool open-source projects I mentioned. The first video would make a pretty cool screensaver and projectM deserves a ton more visualizations than it has today, if you'd like to help!
EDIT I'm on Linux but projectM works on many audio players like Amarok and Clementine, which run on any major OS. xscreensaver seems to have a Windows port at least but I doubt it's much used. Saying that in case you're running Windows of Mac.
Comment on: Modern UI, flashy but ergonomically evil
I have to move my hands and fingers further
I assume you are talking about mobile. In this sense it's not something really easy to get rid of. Mobile, despite having unusually high resolutions, has very little real screen size - so designers really have to come up with clever ways of letting you touch, twist, pinch the screen, etc. and even having lots of menus for complex applications because, well just one menu doesn't really fit the screen anymore, leading to a much higher click ratio. There is no 108-key keyboard to map keys to. Tablets have more screen space but mobile devs must design for both.
This is the basis of the problem and there's not much getting around it. Most minimally complex mobile applications are hard to use that way, even if most people just accept it as being normal, while we professionals know they're actually pretty awful. I absolutely have seen interfaces that are much worse than necessary as well for mobile, like those ones with huge floating buttons right in front of your scrolling content - but that's just terrible design as we have in desktop apps and websites as well.
full of animations, it becomes more and more tiresome to use it
I disagree with you here. Maybe not for us power-users but for most people pretty animations and transitions makes for a better experience. Again, it's entirely possible to overdo it but then it's a case-by-case issue, not a a widespread one as far as I'm concerned.
Comment on: Is voat's full code open source?
Hey good to know! I assumed that since reddit was such a mess with all of its components that Voat would be too! Good luck with your project :)
Comment on: Is voat's full code open source?
I believe so, yes. If you look at the bottom of the page you'll find this link https://github.com/voat/voat
The only thing that Voat uses that isn't open source software as far as I know is the Cloudfare service, which protects it from hacker attacks among other benefits. You can setup your own version of Voat without it though.
The fact that Voat is open-source doesn't mean that it is easy to create your own instance of it, especially if you're not used to compiling code and deploying web applications. I never tried doing so for either website but here is the recipe for reddit as an example of how much trouble you'd have to go to to get your own reddit to work https://github.com/reddit/reddit/wiki/Install-guide
Also Voat is written in C# so you probably would need to own a version of Microsoft Visual Studio and also Microsoft's SQL Server.
I'm not trying to put you off, just not sure you understand how involved of a process this can be. If it was easy tons of other websites like this would exist. There are really many easier alternatives if you want to offer a platform for discussing for your school, like phpbb and literally dozens of other forum platforms https://www.phpbb.com/
Sure, they're not quite as cool as Voat but I imagine they should be a lot easier to get running than a Voat clone, especially if you can find one that offers an installer instead of having to do the deployment work yourself! Anyway, let me know how it goes and good luck!
Comment on: Guess the programming language
16 out of 20! Not bad I guess? I must admit that a few of them were more a process of elimination from the given answers than anything else. Also
Comment on: Funny Code Comments Thread
This is the coding equivalent of the age-old warning from Dante's classic book Inferno:
Abandon hope all ye who enter here
I'd probably not even read the function and probably still have nightmares about it XD
Comment on: How it feels to learn JavaScript in 2016
Pretty funny, reminds of the last in-loco project I worked with. We had a simple Python backend which served a webpage with one or two templating directives - that in turn loaded a single JS library that we used to do everything. I'm a simple guy and I like to keep things simple so no fancy frameworks, just basic javascript and that one library which was pretty useful but not over-used. Our server-side code was pretty small, with one file per AJAX functionality and the client-code was pretty much one HTML per page/section.
Then the new guy came in. Since our technical management was pretty much inexistent to enforce any type of style or quality control in a couple weeks the project had grown over 50 javascript files, most of them 10 lines long, each with 6 lines or so of boilerplate code (like wrapping everything in a function{}()). And there was grunt and npm and probably a dozen other libraries which were as much of a problem as they were solutions - practically overnight. The code was now minified, obfuscated and impossible to debug. Our project that wasn't even 2 months old or so now had 5 or more grunt tasks. It was now impossible to catch any sort of debug information in the browser.
I don't blame him really - it was just how he was used to doing things in his last job so he took advantage of the lack of oversight to turn his new job into his old job as fast as possible for a few reasons: 1. he didn't want to learn anything new; 2. he wanted everyone to feel like he knew what he was doing and the only way to do that is to convert the project into the only way of working he knew of; 3. to make sure that as everything else broke and the project became unproductive he was the go-to guy to get answers from (about the problems he introduced in the first place). I may sound resentful but I am not, of him - the fault lies with the management who didn't even know what was happening and when problems started to arise did nothing but wash their hands of any responsibility. A few weeks later I was let go in a very weird way (agreed by my coworkers) and the only guy working in the project was him. I really don't feel bad over it, he got what he wanted - now he is the only shitty person working on a shitty project with shitty code and I don't mind it. If that's what the company wants I'm more glad to go away, really!
Meanwhile I'm working on my own projects. I've worked for two years on another one which doesn't use a single external Javascript library. It's a two-year project that doesn't use jQuery, doesn't connect to a database, just does some server-side rendering with 3 javascript files and maybe 2 or 3 very small JSP files server-side (100 lines of code?). And it works fine. A bit unconventional but designed way of doing things. May take a new programmer a day or two of reading the code but when the entire project is not even 10 files big there's really not much to learn. Someone who fancies himself a programmer will not be able to work the project but any real programmer will - with a day or two of reading code at most.
So in the end I don't feel like doing things the "fancy way" is actually necessarily beneficial. I'd rather have a project with 2 or 3 500-line long javascript files (which are really not that big if you ask me) than a hundred 10-line long impossible-to-maintain files which are 50% boilerplate code and juggling around several pieces of implied and "magical" infrastructure around that does something but you can't really tell what they're doing, when or how and will break on any type of updating since there's so many working together. It sure makes it awkward when I go to an interview and tell the guys "welp no, I don't know how to use any of these next-gen libraries because I actually never need them* but as long as I can build a decent project that reaches their objectives with the basics, in a productive and well-designed manner, I think I'll be fine.
External frameworks and libraries are fine when selected during the design stage to fit the project as a whole and become a huge help. Mostly though, unfortunately, they're just tools required by bad programmers to avoid actually designing and writing good source code.
Comment on: Are programs today easier to understand than the beginning of programming?
Is this not considered bad practice?
Probably, I just copy-pasted from some other webpage, which is why the extra boilerplate code isn't there. I wanted to focus on a feature-centric comparison.
What about Python doesn't work very well for your needs?
Sorry about assuming you were entry-level, I just imagined this was your first programming course. My bad.
Comment on: Are programs today easier to understand than the beginning of programming?
Yes, my friend, considering an entire generation programmed like, manually, in a hand-punched piece of paper http://ferretronix.com/march/computer_cards/sdcard/micro_sd_tab_card_2.jpg
And then later on like this (assembly language) http://image.slidesharecdn.com/assemblylanguageprogrammingfundamentals-140313050423-phpapp02/95/assembly-language-programmingfundamentals-8086-39-638.jpg?cb=1394687308
I think even as a starting programmer you'll agree that C++ is a lot easier to understand than any of this, right? But I know what you're actually asking: are newer modern languages easier to understand compared to older modern languages? The answer is simple: absolutely! Let me give you two examples.
Safely reading a file with C++ (created 1983):
fstream file;
file.exceptions ( ifstream::failbit | ifstream::badbit );
try {
file.open ("test.txt");
while (!file.eof()){
file.get();
}
} catch (const ifstream::failure& e) {
cout << "Exception opening/reading file";
}
file.close();
Safely reading a file in Python (created 1991):
try:
with open("aFile.csv", 'rb') as f:
for row in csv.reader(f):
print(row)
except IOError:
print "Could not read file:", fName
You can see that the second is roughly half the size of the first (and a lot less "noise")! Since humans deal with the source code and not machine code, this means that half the size is roughly equivalent to taking half the time to read and understand and this translates pretty well to half the number of bugs since it's half the probability of you making mistakes (since you write less code), etc. When this code is converted (compiled) to the ones-and-zeros of the computer code, they'll be probably become the same size (maybe the second one will be bigger even) but unless you need super small and super-duper fast programs it makes no difference, except the advantages I pointed out here already.
This is actually a study field about programming languages. This means that newer languages regularly produce less, cleaner code than older languages. Here is a quick table from Wikipedia (the line ratio is how humans would see it while statement ratio is how computers would see it, kinda; a higher number means more is done with less writing) https://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
Since you seem to be a beginning programmer let me give you a heads up: C++ is not easy to understand in my view. I've worked in a few C++ projects and I'd never start a new C++ project myself, I'll always use newer languages if I get to choose. It is a great language to learn the basics of programming but once your course is finished do yourself a favor and learn Python or Java (Java is already a bit dated too) or any newer language that you like. Trust me: once you've learned C++ learning any other major language will be very easy for you!
Comment on: What programming language SHOULDN'T you learn?
Perl: as stated in a recent article posted here about the while statement (which I can't find because Voat search sucks) Perl has tried very hard to offer absolutely every possible coding mechanism ever offered by any other functional language. The result is that everyone writes code in their very own way and comparing person X's code to person Y's code could make you believe they're actually different programming languages. In-line regular expressions, operator overloads and implicit variables are just a few examples out of many that makes Perl one of the hardest non-crypto languages to read.
If you're looking for a scripting language Python, Ruby and others are actually sane alternatives - Python even has as one of its core design principles that There should be one-- and preferably only one --obvious way to do it - which seems to me as a direct jab at Perl development history. For the same reasons I'd say people are better off using #!/usr/bin/python3 than BASH when doing their Linux scripts. I know I do. Lua is also a lightning fast and embeddable scripting language for your projects.
Here is an example line of Perl code, taken from their regex guide:
$_ **= $_ , / {$_} / for 2 .. 42;
PHP: If you look at PHP's premise you'd think it's all good, right? A templating language that is super fast for the web. Right? Right but it has a lot of problems. It's a way more low-level language than it should be for working with the web (many of it's core functions are just direct calls to C standard library, which is crazy and super outdated nowadays) - this alone means silly web developers will try to use it for a ton of backend processes that really shouldn't be done in a templating language.
The major problem for me is the userbase though - PHP developers (the big frameworks you'll end up using with PHP included) can't help but repeatedly choose the weird and bug-prone ways of implementing things instead of good design, which results often in hard-to-debug errors and weird situations you just can't seem to get away from. I'm not a huge PHP coder though I've done my share but it seems to me that when the entire community has to quirk around a language then that's either the language's fault for making this easier to do than to create proper code or even for allowing it at all! Also there are a ton of crash courses promising "good IT money" and will teach you basic PHP, which means the market is flooded with Wordpress projects that are crap-full of copy-pasted boilerplate code where none should be, which the creator just puts up and gets the money from the client but it's impossible to maintain later on - which means it will fall on your hands instead once it needs more work and you'll have to do it all over again and explain to the client why it's even more expensive doing so than the few hundred bucks he paid to get the site up to begin with.
Again, there are dozens of modern scripting languages and frameworks that are better alternatives to PHP. Practically every language now has a templating framework, from Java to Python - just pick one you like and let me know what's your favorite alternative since the jury for templating is still open for me. Much more flak on PHP if it's your favorite language and you're thinking welp this guy is being a bit too harsh http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
Comment on: 0 experience, getting into C++, really just not understanding why you'd want/need to use void
As far as I know Android development is done 100% in Java. Good luck with your studies!
Comment on: 0 experience, getting into C++, really just not understanding why you'd want/need to use void
You are right but uninformed. Python does not traditionally create an executable file but it can. Also, creating an executable file also has it's disadvantages. An executable, more traditional file will not run on another operating system (Windows, Mac, Linux) or computer architecture (32 versus 64 bits for example)... so sometime it's better to have a Python file that can run everywhere and be easily installed with pip than to have to compile, cross compile and distribute your own executable files and installers. I understand what you say that you want to create traditional desktop programs but you should know that your desire is pretty much a decade outdated.
As for programming languages, I strongly recommend you stick to Python until you're super-fluent with the basics. It's great for smaller projects, using APIs and so on. I personally use Java for bigger, more complex projects but it's growing old as a language by now.
You say you'd like to interact with Voat and so on. Using Greasemonkey (Firefox) or Tampermonkey (Chrome) you can create user-scripts in Javascript that let you directly access and modify webpages from within your browser, automatically. It's like the Javascript developer console, but super-charged. It's great for learning programming because it lets you jump right in and interact with websites in a new manner. Here is an example Userscript I wrote for Voat https://www.voat.co/v/voatdev/comments/695236
Finally, all the languages mentioned here are offered as courses on https://www.codecademy.com/ . I won't even try to sell you how awesome that site is, just go check it out.
Comment on: 0 experience, getting into C++, really just not understanding why you'd want/need to use void
for whatever reason that may be important?
The reason why it is important is because every function must have some sort of return qualifier. You use int to return numbers, char[] to return strings... in this way you also need a word to tell the compiler that you're not returning anything so that word is void. I don't see why it's a big deal? Of course you could just leave it empty instead but this is how the people who created C decided it would be better to work with, for a variety of reasons.
Also, why are you learning C, a language that, in all likelihood, is older than yourself? If you don't have a good answer I'd suggest you go for newer, better things instead.
On a larger scale, I do agile methodologies. Any project for me sits somewhere between a week and a month. Anything requiring more work becomes the next phase and a new project of its own.
If the client asks me "but I need to know how much it will cost on the long run" or "I need a baseline for the finished product" then I tell him that I'm sorry I can't help him and that anyone who actually provides him with answers for these questions is either outright lying to please him and get the job or is so ignorant about software development that he actually believes his estimate will work out. If needed, I will show him the annual industry reports from big shots like IBM and Microsoft that prove long-term estimates are wrong most of the time and often by alarming margins - let alone Joe the neighbor guy who my client has talked to before. I also recommend that he never agree to a long-term contract like that because agreeing to a timeline and certain set of features from the get-go often will prevent him from changing ideas midway and modifying the project towards an optimal outcome during its progress. He may get what he wanted but maybe he won't like it.
If the client still demands that I give him an unique price and duration for the project I tell him that I'm very sorry but my work is a service, not a product. You can't go into a store and buy "one custom software, please". It's more like hiring a private teacher and paying a monthly fee until the student is ready. I sure can give you a estimate of what I can do in the next 2 weeks but not anything much longer than that. If the guy still doesn't feel comfortable, good riddance - the kind of guy who wants an immovable price tag is often the kind of guy who will make all kinds of moves on you when you deliver the project. "I know I didn't ask for a print version of the reports but what good to me are reports that can't be printed?!" And will never show you the color of money until they twist and turn everything they can short of you opening a lawsuit against them... or even never pay you, it happens! I know for a fact that is not the sort of client-base I want to build for myself.
Regarding actual agile methods of estimating development, there is a lot of info you can find on Wikipedia alone and even in cheap books that would do them a lot more justice than I ever could here.