Skip to content

Tutorial 2 How the Code Works el

James Morris edited this page Jul 29, 2026 · 1 revision

Μάθημα 2 · Πώς λειτουργεί ο κώδικας

Στόχος: κατανόησε τη χούφτα σχεδιαστικών επιλογών που κάνουν αυτό το έργο εύκολο — και ασφαλές — να αλλάξει με έναν πράκτορα AI. Δεν χρειάζεται να απομνημονεύσεις τον κώδικα· χρειάζεσαι το νοητικό μοντέλο, ώστε να καθοδηγείς τον πράκτορα με ακρίβεια.

← Προηγούμενο: Μάθημα 1 Προσανατολισμός · Επόμενο: Μάθημα 3 Η πρώτη σου εργασία με πράκτορα


Ο χάρτης

lockedin-cli/
├── bin/lockedin.js      # σημείο εισόδου — το ΜΟΝΟ κομμάτι που κάνει είσοδο/έξοδο
├── src/lockedin.js      # ο πυρήνας — καθαρές συναρτήσεις που επιστρέφουν strings
├── test/
│   ├── unit.test.js     # ελέγχει τις συναρτήσεις πυρήνα απευθείας
│   └── cli.test.js      # ξεκινά το πραγματικό binary και ελέγχει την έξοδό του
├── tools/screenshot.js  # αποδίδει τα SVG που βλέπεις στο docs/
└── package.json         # metadata + το script `npm test`

Τέσσερις ιδέες το κάνουν να λειτουργεί. Μάθε αυτές και μπορείς να ζητήσεις από τον πράκτορα σχεδόν οποιαδήποτε αλλαγή με σιγουριά.

Ιδέα 1 — Ένας καθαρός πυρήνας που επιστρέφει strings

Άνοιξε το src/lockedin.js. Πρόσεξε ότι οι συναρτήσεις απόδοσης δεν τυπώνουνεπιστρέφουν strings:

function renderConnect() {
  const names = shuffle(NAMES).slice(0, 6);
  // ...χτίζει έναν πίνακα από γραμμές...
  return out.join('\n');   // επιστρέφει κείμενο· δεν τυπώνει τίποτα
}

Όλο το πραγματικό τύπωμα (και η ανάγνωση των πλήκτρων σου) συμβαίνει στο bin/lockedin.js. Αυτός ο διαχωρισμός «ο πυρήνας επιστρέφει δεδομένα, το άκρο κάνει I/O» είναι το μοναδικό πιο σημαντικό πράγμα εδώ, γιατί μια συνάρτηση που απλώς επιστρέφει ένα string είναι τετριμμένο να ελεγχθεί:

const out = app.renderConnect();
assert.ok(out.includes("“Θα ήθελα να σε προσθέσω στο professional network μου.” — στάλθηκε σε "));

Χωρίς προσομοίωση terminal, χωρίς σύλληψη του stdout. Όταν ζητάς από τον πράκτορα να προσθέσει ένα χαρακτηριστικό, γι' αυτό μπορεί να προσθέσει και ένα γρήγορο, αξιόπιστο test γι' αυτό.

Ιδέα 2 — Pools περιεχομένου

Τα αστεία ζουν σε απλούς πίνακες κοντά στην κορυφή του src/lockedin.js:

const HOOKS = [ 'Μη δημοφιλής άποψη:', 'Άστο να κάτσει μέσα σου.', /* ...~25 συνολικά... */ ];
const LESSONS = [ '→ Το network σου είναι το net worth σου.', /* ... */ ];

Οι γεννήτριες επιλέγουν από αυτά τα pools. Στην v1.2.0 κάθε pool μεγάλωσε σε ~25 παραλλαγές, και προστέθηκε ένα δεύτερο στρώμα από pools προτύπων (πράγματα όπως τα POST_REVEALS και REFLECT_TAGSETS) ώστε η δομή κάθε εξόδου να ποικίλλει, όχι μόνο οι λέξεις. Η προσθήκη περιεχομένου είναι συχνά τόσο απλή όσο η προσθήκη strings σε έναν πίνακα — μια τέλεια πρώτη εργασία για να αναθέσεις σε έναν πράκτορα.

Ιδέα 3 — Τυχαιότητα με seed = ντετερμινιστικά tests

Η τυχαία έξοδος και τα αυτοματοποιημένα tests ακούγονται ασύμβατα. Αυτό το έργο τετραγωνίζει τον κύκλο με μια γεννήτρια τυχαίων αριθμών με seed:

setSeed(42);
const a = generatePost();
setSeed(42);
const b = generatePost();
// a === b  → ίδιο seed, ίδια δημοσίευση

Κάθε τυχαία επιλογή περνάει μέσα από τους κοινούς βοηθούς pick() / shuffle(), που αντλούν από αυτή τη γεννήτρια με seed. Όρισε LOCKEDIN_SEED=42 και το CLI είναι πλήρως αναπαραγώγιμο. Ο χρυσός κανόνας για κάθε αλλαγή: η νέα τυχαιότητα πρέπει να χρησιμοποιεί pick / shuffle, ποτέ Math.random απευθείας — αλλιώς ο ντετερμινισμός (και τα tests) σπάνε. Κράτα το στην τσέπη σου· θα το θυμίσεις στον πράκτορα στο Κεφάλαιο 3.

Ιδέα 4 — Δύο στρώματα από tests

  • Το test/unit.test.js καλεί τις συναρτήσεις πυρήνα και διαβεβαιώνει για τα strings που επιστρέφουν (γρήγορα, ακριβή).
  • Το test/cli.test.js πράγματι ξεκινά το bin/lockedin.js και ελέγχει το πραγματικό stdout και τον κωδικό εξόδου του (αποδεικνύει ότι όλο το πράγμα λειτουργεί από άκρη σε άκρη).

Μαζί είναι η πύλη. Επίσης κωδικοποιούν αναλλοίωτα — υποσχέσεις που δίνει η εφαρμογή. Για παράδειγμα, μια δημοσίευση πάντα ανοίγει με ένα γνωστό hook και πάντα περιέχει τουλάχιστον τρία διδάγματα· η οθόνη «connect» λέει πάντα incalculable. Όταν ένας πράκτορας αλλάζει κώδικα, αυτά τα tests πιάνουν οτιδήποτε έσπασε σιωπηλά μια υπόσχεση.


Γιατί αυτό έχει σημασία για τη δουλειά με έναν πράκτορα

Βάλε τις τέσσερις ιδέες μαζί και παίρνεις έναν κώδικα όπου ένας πράκτορας μπορεί:

  1. Να προσθέσει ένα χαρακτηριστικό ως καθαρή συνάρτηση που επιστρέφει ένα string,
  2. Να προσθέσει ένα test γι' αυτό χωρίς ακροβατικά I/O,
  3. Να κρατήσει την έξοδο αναπαραγώγιμη μέσω της γεννήτριας με seed, και
  4. Να αποδείξει ότι δεν έσπασε τίποτα τρέχοντας την υπάρχουσα πύλη.

Αυτός είναι ο βρόχος που θα τρέξεις στο επόμενο κεφάλαιο.

✅ Δοκίμασέ το με τον πράκτορά σου

Ζήτα από τον πράκτορά σου να επαληθεύσει την κατανόησή σου — διαβάζοντας, όχι επεξεργαζόμενος:

  1. «Παράθεσε κάθε pool περιεχομένου στο src/lockedin.js και πόσες εγγραφές έχει το καθένα.»
  2. «Δείξε μου ένα αναλλοίωτο που επιβάλλει το test/unit.test.js για το generatePost, και εξήγησε τι θα το έσπαγε.»
  3. «Πού ορίζεται η γεννήτρια με seed, και ποιες συναρτήσεις πρέπει να τη χρησιμοποιούν αντί για Math.random; Μην αλλάξεις τίποτα — απλώς εξήγησε.»

Όταν οι απαντήσεις του πράκτορα ταιριάζουν με αυτό το κεφάλαιο, είσαι έτοιμος/η να χτίσεις.

Επόμενο: Μάθημα 3 Η πρώτη σου εργασία με πράκτορα

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally