Emily

Emily

Preface: I’m not sure if thise is the right place, because this is not direclty Elixir related… but I’ve always got some of the best advice from this community.

Current situation: Spinning wheels… false starts… moving way too slow trying to get a software project airborne.

Mission:

Get a broad spectrum, eagles eye overview of best development practices, tools, resources, systems, techniques, streamlining, optimisations, unspoken tricks & practices etc. used to produce some of the best code we’ve seen so far, complete with case studies of successful projects, case studies of unsuccessful projects.

On the other side of the deep dive, have enough of an understanding of the landscape that I can avoid the common pitfalls that cause software projects to fail… compressioning years into days.

I’ve largely been self-taught. From that, a lot of frustration, and I’m sure bad habits developed.

I want to expose those now. And move forward with a much stronger, broad spectrum grounding of not the details of coding, but more so, what it takes to make a software project successful, from start to finish.

What do you recommend?

Showing Posts 1 to 10

ardhitama

ardhitama

Read Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series)

That should get you far enough.

dimitarvp

dimitarvp

I’d say get a few books. Look at the new Book Club section – people give really honest reviews and gists about the chapters.

As for general best practices, don’t tempt us. :003: Some of us can talk about this for weeks. But IMO wisdom cannot be transferred to anyone with words alone; one has to have grown to understand the problem the wisdom solves in order to accept it. Not sure that any amount of explaining will help.

That being said: make a small project that you’re comfortable with it being public. Offer it for review here. You’ll get objective and constructive advice.

We can also start by asking you the question: what are the top 3 issues you believe are hampering you? Maybe you just have an impostor syndrome and you are actually really good.

gregvaughn

gregvaughn

I suggest you find ways to get in-person time with someone more experienced. That could involve pair programming at work, or maybe spending lunches with co-workers discussing technical topics. It might also help to get involved with local user groups. Via these techniques over my career I discovered people I could learn from and I’ve continued to keep in touch with them over decades.

I know you want to have all the knowledge/experience now, and your enthusiasm is laudable, but have some patience with yourself. It will take time. Start with solving concrete problems, then working to more general abstractions. Over time you’ll see connections between past problems you faced and a current problem and gain intuition on how to approach it.

niels_bom

niels_bom

That’s a lot of stuff :slight_smile:
Avoiding pitfalls that cause software projects to fail: if you figure that out, you can make a lot of money with that.

As @gregvaughn said: have patience. And his other tips I definitely agree with.

I’ll add: you’re going to keep making “mistakes”, going into dead ends and “waste time”. But that is part of learning. When you learned to walk (assuming you can) falling was part of the process. There aren’t really any shortcuts.

Personally I always try to ask: what kind of learning is most effective (in this field)? What kind of learning works for me? And then work hard and smart at it.

JEG2

JEG2

Author of Designing Elixir Systems with OTP

I would be happy to schedule some video chats if you just need to talk through some ideas and/or code.

dwahyudi

dwahyudi

There are plenty books and courses about software development. But software development tends to follow the same path:

  • planning
  • design
  • coding
  • testing

The twist is, there are plenty branches, schools of thoughts, opinions, and best practices on how to do these things. Computer science is natural, much like math, but when you add people into it, it becomes software engineering, it is so different, because there are people, people are different to each other.

Some people prefer doing the TDD, others not so.
Some people prefer doing daily stand-up, others not so.
Some people prefer using framework like scrum, others not so.

Even Agile itself (according to Martin Fowler) means no framework, no rule, just follow what team knows best.

Now, if you ask me what universally makes a software project to fail (in engineering point of view), I can make you a simple stupid list:

  • Code has no test, bugs and regressions emerge because tests are not enough.
  • Hard to read/navigate/understand code, when even your text editor complaints about it, it means your code is not healthy. Developers need extra energy on maintaining them, developers tend to require more time to do anything about it, and new onboarding developers will have difficulty on learning about them. This brings us to other topics like design pattern, object oriented programming and functional programming itself.
  • Hard to change/adapt code. Read below.
  • Unclear software requirements/specifications, this is the bottom of the Jenga, the earliest domino. In modern time like this, a lot of developers work in startups with fast-moving environment which probably means fast moving requirements. This directly correlates with above point with writing code that adapt to changes. Plenty of startups as the sprints goes on and on, have difficulty moving quickly because their codes are harder to maintain then before. I know this is not 100% developers responsibilty, so that’s why people create BDD, so we create a ‘bond’ with non-technical people to specify the requirements.

The first point above actually correlates with the last point as well, as software requires more and more features, quickly, you need assurances on your hand, about the correctness of your features in your code. Some developers actually pairing up to write tests and code at the same time. Extreme programming. Whatever your software development methodology is, please write good tests and easy to read/understand/change code. The business will thank you.

dimitarvp

dimitarvp

As a slight diversion from main topic: lately I’ve been casually helping an acquaintance getting their small project off the ground (in some of my free time). I invested in property tests very early (the project requires parsing of some pretty specific data). They were highly impressed by how the very first iteration of the code was not making a single mistake when parsing and importing into the DB, and now I have a money offer that I have to refuse because I’m not gonna work extra behind the back of my very awesome employer.

Oh well. But regardless: property tests, if you code your contract / expectations well, will catch your smallest mistake immediately.

tty

tty

These are some of the classics and some not that well known books which would address your specific question:

  1. Mystical Man Month - F. Brooks (wiki, book)

This is a classic book on SE and very easy reading as well.

  1. Introduction to the Personal Software Process - W. Humphrey (wiki, book)

Using a series of exercises the PSP teaches you to improve your estimating and planning skills, manage quality and reduce the number of defects in your work. I did the exercises in the older version of this book twice, once a week over 8-10 weeks. Perhaps the hardest book to read in this list.

  1. The Open Toolbox of Techniques - Brian Henderson-Sellers et al. (book)

One of the harder books to find (in a public/university library), this book is a survey of various SE techniques, giving a brief description of each, when it is appropriate to use a specific techniques, its relative difficulty and further references. This book exposes you to a grab-bag of techniques that you can draw on when needs arises.

  1. Peopleware - DeMarco et al (wiki, book)

Given that most projects are group efforts this book covers the social aspect of software development. Like Mystical Man Month this book is very easy going and informative.

Enjoy!

yurko

yurko

That might be a little off-topic but I can’t not post it - “The Tao of Programming”, timeless classics :smiley:

The Tao of Programming

The Mythical Man-Month: “adding manpower to a late software project makes it later”

The Tao of Programming:

A manager went to the Master Programmer and showed him the requirements document for a new application. The manager asked the Master: “How long will it take to design this system if I assign five programmers to it?”

“It will take one year,” said the Master promptly.

“But we need this system immediately or even sooner! How long will it take if I assign ten programmers to it?”

The Master Programmer frowned. “In that case, it will take two years.”

“And what if I assign a hundred programmers to it?”

The Master Programmer shrugged. “Then the design will never be completed,” he said.

joaquinalcerro

joaquinalcerro

Do you know if there is a remote tutoring going on?

Where Next? Top

Trending in Chat/Questions Top

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews