Top products from r/softwaredevelopment

We found 30 product mentions on r/softwaredevelopment. We ranked the 28 resulting products by number of redditors who mentioned them. Here are the top 20.

Next page

Top comments that mention products on r/softwaredevelopment:

u/ilikeorangutans · 2 pointsr/softwaredevelopment

Let me start by saying good code is code that solves the business problem at hand. For someone that really cares about internal quality of software that was a hard thing to accept.

You didn't quite define what you mean by "good" in your question, so I assume you mean adherence to SOLID principles. I've long thought like this too but realized adherence to some metric by itself is not very helpful, exactly because you end up in situations where your code is overdesigned, or worse, has the wrong abstractions.

What helped me figure out where the line is was stepping away from SOLID and focusing on Test Driven Development (TDD). TDD is great because it forces you only to write as much code as you need, not more not less. But in order to write testable code you'll have to apply SOLID principles. So you end up with code that reaches just the abstraction level you need to solve the business issue you're trying to solve.

The interesting aspect of this is that there's no clear universal line you can draw and say "this is too much design!" or "this is too little!". What I've observed is that there's just the right amount of design, and interestingly that's, at least in my opinion, a function of how much change you expect. Writing a 100 line hack to do something that you'll never change again is perfectly good code - it does what you need it to, it has certainly no wrong abstractions or over design. But as with most software, change is inevitable and with change internal quality becomes more important. If your code has good internal quality changing it is easier. The better the internal quality, the easier, within limits. So finding the line is an interesting exercise to balance the cost of design vs the expected rate of change.

If I may recommend some reading here:

u/unknownmat · 1 pointr/softwaredevelopment

Could you post a link to the negative response you received? I would be curious to judge it for myself.

There was a fairly strong anti-OO backlash that I would place in the early 00's up to about 2008. The furor has since died down (or at least I'm no longer seeing anti-OO blog posts like I used to). If you're interested I could probably dig up some more, but off the top of my head:

  • Execution In The Kingdom of Nouns

  • Why Arc Isn't Especially Object Oriented - and in particular "the smartest programmers [Graham knows] are some of the least excited about [Object Oriented Programming]".


    Personally, I'm not a huge fan of OOP. It models some problems very well, such as GUI widgets and simulations. But in most domains it tends to result in a bunch of scaffolding that becomes a permanent part of your code base. It is a crutch for when you poorly understand your problem - objects give you something "concrete" to grasp and this is fine for a first pass - but ultimately you should prefer cleaner and simpler abstractions that more closely map to the problem domain.

    I also think that C++ is a horrible language for OOP. It's not flexible enough and thus requires a great deal of biolerplate to achieve object-like behavior. For OO-tasks I prefer to work in Smalltalk-inspired languages like Python or Ruby. In particular, characteristics of "real" OO languages would be: late-bound, dynamically typed, and introspective.

    Instead, when I work in C++ I prefer to use (what I think of as) "modern style" which was first defined (to the best of my knowledge) in Alexandrescu's book, and is perhaps best embodied by the Boost C++ library style. I realize that this is not everyone's cup of tea. But I think that this is the one area that C++ legitimately shines. It is what I call the "no compromise" style of programming - with the help of template meta-programming libraries you can write your code at a very high level of abstraction, and yet compile it down to extremely efficient code as if it were hand-coded in C to do that specific task. It can be pretty amazing, although it can also be (and probably is) a Turing Tarpit.

    EDIT: Not sure why it really matters but: mid-30's, and I work on automotive infotainment systems. C & C++ are the only languages officially supported on the platform, so despite my dislike of C++, I write a lot of it and it is probably my strongest language.
u/NowImAllSet · 1 pointr/softwaredevelopment

Disclaimer: I'm an undergraduate and don't know shit.

I think the best way to learn is from the small parts, up. So, first learn a structured (preferably OO) programming language. Python will do, but I'd recommend something with compilation and static typing. Python is great for scripting and has its purpose, but designing and implementing a complex system in Python is a nightmare. After learning that, learn how to write your classes, methods and just generally structure your code better. I highly recommend Clean Code for that. After understanding good class design and code structure, start learning about higher-level concepts on how those well-defined classes should communicate with each other and be decoupled. Important concepts to learn are coupling and cohesion, polymorphism, inheritance, etc. All the basic OOP concepts. From there, you can move onto architecture. The book I used in my courses was System Analysis and Design, but there could very well be better ones out there.

Edit: Oh, and it's helpful to at least be knowledgeable of common design patterns. I really like SourceMaking's approach and explanations, but once again there's tons of good resources out there.

u/jadanzzy · 3 pointsr/softwaredevelopment

Gotcha. That really sucks, and I mean that in the most meaningful way possible haha.

That type of thinking is the complete opposite of "agile" development, where typically there is a budget, but product owners and devs work together, iteration-by-iteration to determine what needs to change. If an "estimate" is carved in stone, then it's not an estimate anymore, but a fixed-bid project--again, the complete opposite of what developing with agility is supposed to be.

Sounds like a good starting place is learning about lean development and building a minimum viable product, since they're so sensitive about estimate granularity. That manager will have to learn to lead building a very minimum viable product, with as minimally necessary a valuable feature set as possible.

I recommend reading:

u/ichosethisone · 1 pointr/softwaredevelopment

I'm just now implementing Scrum formally within our company. For me, at the time, it's all upside. I have a CEO & COO that are non-technical (at least as far as software development is concerned), that have really been struggling to understand the team's productivity in a meaningful way.

For me, being able to plan sprints and develop a velocity has been a game-changer. It's very easy now for them to prioritize work and know with a high degree of confidence where we will be after our sprint is finished. That's very important to them, so Scrum really simplifies my life because it's much easier to plan with them using the tools it provides.

I personally purchased Jeff Sutherland's book "Scrum", who was a co-creator, through Audible. Worked pretty well as an e-book, since the complexity is pretty low and most of it was conceptual. https://www.amazon.com/Scrum-Doing-Twice-Work-Half/dp/038534645X/

u/ttutisani · 1 pointr/softwaredevelopment

I like the idea to a certain extent. You should try to not make it too technical. I think you have a technical background and you are trying to make it too technical. That won't help, as the business is not technical, and it's not supposed to be. Most business divisions and enterprises solve non-technical problems.

Here is the middle ground that I can suggest: Start with Domain Specific Language - that's the ubiquitous language that you are trying to come up with. Join it with Domain Driven Design - that's the model backing the entire enterprise. Once you join these two sciences, you get the answer - you need to develop custom software that solves those exact needs that you mention. Develop a custom language and its parsers (just like compilers exist for programming languages, but DSL is much simpler than that). Then see where it takes you further.

I have a deep understanding and experience with both the DSL and DDD, in case you are curious or have further questions. If you dig into these, you may find exciting things that put you on the right track.

u/maze-le · 1 pointr/softwaredevelopment

Try to make a sketch: What are the dependencies of each function / class / module. How are they interconnected, what is the scope of each dependency (can they be bundled into a module / class on its own?). I usually make such sketches on paper -- old school.

If you have the sketch, you can start unbundling it by trying to minimize the dependencies of each part to one another. Once that is done, you can either refactor or outright reimplement the code. Depending on how big the mess is, a complete reimplementation can be simpler sometimes (albeit more time consuming).

There are also very good books on that issue:

u/simba09 · 3 pointsr/softwaredevelopment

I have started reading this book and so far I am enjoying it

Domain-Driven Design: Tackling Complexity in the Heart of Software https://www.amazon.com/dp/0321125215/ref=cm_sw_r_cp_apa_i_R60tDb2Y19V4X

It came recommended to me from a few different sources including Reddit.

u/tinbuddychrist · 1 pointr/softwaredevelopment

It's not clear to me if your issue is needing more education or getting a foot in the door.

I second the suggestion for Coursera - lots of great content on there.

What languages have you learned so far? I have found this to be a good intro to Python.

Many of the bigger software companies are less fixated on your resume and will instead give you a series of programming tests. Get a copy of Cracking the Coding Interview and work through all of the questions in every chapter, including the "Advanced Topics".

Where (approximately) do you live? Are you willing to relocate? (PM me if you don't want to tell the world.)

u/river-wind · 1 pointr/softwaredevelopment

All of the recommendations already given are good. In addition, Pick up a copy of Cracking the Coding Interview, and do as many examples as possible.

https://smile.amazon.com/gp/aw/d/0984782850/ref=dp_ob_neva_mobile

u/antonydenyer · 1 pointr/softwaredevelopment

http://developer.7digital.com/blog/technical-academy-tour the programme we ran was 3 months and designed to get you onboard as a full-time developer. It was tough but we supported the graduates throughout the process. At lot will depend on your employer. Try and get someone to be your mentor whilst you're there. Also read http://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382 before you start