ಹೆಚ್ಚಿನ ಪ್ರೋಗ್ರಾಮರ್ಗಳಿಗೆ ಒಂದು ಅಂಧಾಕಾರವಿದೆ (blind spot). ಅವರು ಒಂದು distributed system ಅನ್ನು ಸುಲಭವಾಗಿ debug ಮಾಡಬಹುದು ಅಥವಾ ಹೊಸ framework ನೊಂದಿಗೆ ಹೋರಾಡಬಹುದು, ಆದರೆ ಹತ್ತು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಮಾಡಬಹುದಾದ ಒಂದು ಮ್ಯಾನುಯಲ್ ಟೆಕ್ಸ್ಟ್ ಎಡಿಟಿಂಗ್ಗಾಗಿ ಇಪ್ಪತ್ತು ನಿಮಿಷಗಳನ್ನು ವ್ಯರ್ಥ ಮಾಡುತ್ತಾರೆ. ಇದಕ್ಕೆ ಕಾರಣ ಯಾವಾಗಲೂ ಒಂದೇ: regular expressions ನೋಡಲು ಅಸ್ತವ್ಯಸ್ತವಾದ ಸಂಕೇತಗಳಂತೆ (line noise) ಕಾಣುತ್ತವೆ. ಒಂದು ಸಾಮಾನ್ಯ ಪ್ಯಾಟರ್ನ್ ಎಂದರೆ 1990ರ ದಶಕದ ಮಾಡೆಮ್ನಿಂದ ಬಂದಂತೆ ಕಾಣುವ ಸ್ಲ್ಯಾಶ್ಗಳು, ಬ್ಯಾಕ್ಸ್ಲ್ಯಾಶ್ಗಳು ಮತ್ತು ವಿರಾಮಚಿಹ್ನೆಗಳ ಗೋಡೆಯಂತೆ ಇರುತ್ತದೆ. ಈ ದೃಶ್ಯ ಅಸ್ತವ್ಯಸ್ತತೆಯು ಸಮರ್ಥ ವ್ಯಕ್ತಿಗಳನ್ನು ಒಂದು ನಿಜವಾದ ಮೌಲ್ಯಯುತ ಕೌಶಲ್ಯದಿಂದ ದೂರವಿಡುತ್ತದೆ.
ಒಳ್ಳೆಯ ವಿಷಯವೆಂದರೆ regex ಕಷ್ಟವೇನಲ್ಲ. ಅದು ಸಾಂದ್ರವಾಗಿದೆ (dense). ಸಂಕೇತಗಳು ಸಣ್ಣ ಜಾಗದಲ್ಲಿ ಅಪಾರ ಪ್ರಮಾಣದ ಅರ್ಥವನ್ನು ತುಂಬುತ್ತವೆ, ಆದ್ದರಿಂದ ಅಲ್ಲಿ ವಾಸ್ತವವಾಗಿ ಒಂದು ನಿಖರವಾದ ವಿವರಣೆ ಇದ್ದರೂ ನಿಮ್ಮ ಕಣ್ಣುಗಳು ಅಲ್ಲಿ ಅಸ್ತವ್ಯಸ್ತತೆಯನ್ನು ಕಾಣುತ್ತವೆ. ಒಮ್ಮೆ ನೀವು ಸರಿಯಾದ mental model ಅನ್ನು ಹೊಂದಿಕೊಂಡರೆ, ನೀವು ಸಂಕೇತಗಳನ್ನು ಒಂದೊಂದಾಗಿ ಡಿಕೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ, ಬದಲಾಗಿ ಅವು ವಿವರಿಸುವ ಆಕಾರವನ್ನು (shape) ಓದಲು ಪ್ರಾರಂಭಿಸುತ್ತೀರಿ. ನೀವು ಹಾಗೆ ಮಾಡಿದಾಗ, ಆ ಅಸ್ತವ್ಯಸ್ತತೆಯು ಸಂಪೂರ್ಣವಾಗಿ ಮಾಯವಾಗುತ್ತದೆ.
ಒಂದು ಪ್ಯಾಟರ್ನ್, ಪ್ರೋಗ್ರಾಂ ಅಲ್ಲ
ಮೂಲಭೂತ ಬದಲಾವಣೆಯೆಂದರೆ regular expression ವಾಸ್ತವವಾಗಿ ಏನದು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. ನೀವು ಬರೆಯುವ ಹೆಚ್ಚಿನ ಕೋಡ್ ಪ್ರೊಸೀಜರಲ್ (procedural) ಆಗಿರುತ್ತದೆ: ಇದನ್ನು ಮಾಡು, ನಂತರ ಅದನ್ನು ಮಾಡು, ಈ ಕಂಡೀಷನ್ ಅನ್ನು ಪರಿಶೀಲಿಸು, ಮತ್ತೆ ಲೂಪ್ ಮಾಡು. regex ಒಂದು ಪ್ರೊಸೀಜರ್ ಅಲ್ಲ. ಇದು ಪಠ್ಯವು ಹೇಗಿರಬೇಕು ಎಂಬುದನ್ನು ವಿವರಿಸುವ ಒಂದು ಸ್ಥಿರ ಪ್ಯಾಟರ್ನ್ (static pattern). ನೀವು ಹುಡುಕಲು ಹೇಗೆ ಎಂಬ ಸೂಚನೆಗಳನ್ನು ಬರೆಯುತ್ತಿಲ್ಲ; ಬದಲಾಗಿ ನೀವು ಮ್ಯಾಚಿಂಗ್ ಇಂಜಿನ್ಗೆ ಒಂದು ಸ್ಕೆಚ್ ನೀಡಿ ಅದನ್ನು ಕೆಲಸ ಮಾಡಲು ಬಿಡುತ್ತಿದ್ದೀರಿ.
ಇದನ್ನು ಸರಳ ಇಂಗ್ಲಿಷ್ನಲ್ಲಿ ಆಕಾರಗಳನ್ನು ವಿವರಿಸುವಂತೆ ಭಾವಿಸಿ:
- ಐದು ಅಂಕಿಗಳ ಸಂಖ್ಯೆ.
- ಇಮೇಲ್ ವಿಳಾಸ.
- ದೊಡ್ಡಕ್ಷರದಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಸಾಲು.
regex ಮಾಡುವುದು ಇಷ್ಟೇ, ಆದರೆ ಅದು ಸಂಕುಚಿತ ಅಕ್ಷರಮಾಲೆಯನ್ನು ಬಳಸುತ್ತದೆ. ನೀವು \d{5} ಅನ್ನು ನೋಡಿದಾಗ, ನೀವು ಮ್ಯಾಜಿಕ್ ಅನ್ನು ನೋಡುತ್ತಿಲ್ಲ. ನೀವು "ಒಂದು ಅಂಕಿ, ಐದು ಬಾರಿ" ಎಂಬುದನ್ನು ನೋಡುತ್ತಿದ್ದೀರಿ. ನೀವು ^[A-Z] ಅನ್ನು ನೋಡಿದಾಗ, ನೀವು "ಸಾಲಿನ ಆರಂಭ, ನಂತರ ಒಂದು ದೊಡ್ಡ ಅಕ್ಷರ" ಎಂಬುದನ್ನು ನೋಡುತ್ತಿದ್ದೀರಿ. ಕೌಶಲ್ಯವೆಂದರೆ ನೆನಪಿಟ್ಟುಕೊಳ್ಳುವುದಲ್ಲ. ಬದಲಾಗಿ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಒಮ್ಮೆ ನೋಡಿ ಅದನ್ನು ಮತ್ತೆ ಆ ಸರಳ ಇಂಗ್ಲಿಷ್ ವಿವರಣೆಗೆ ಅನುವಾದಿಸುವುದನ್ನು ಕಲಿಯುವುದು. ಒಮ್ಮೆ ನೀವು ಆ ಅನುವಾದವನ್ನು ಮಾಡಬಲ್ಲೆ ಎಂದಾದರೆ, ಭಯವು ದೂರವಾಗುತ್ತದೆ.
ಸಮಯ ವಾಸ್ತವವಾಗಿ ಎಲ್ಲಿ ವ್ಯರ್ಥವಾಗುತ್ತದೆ
ಜನರು ಸಾಕಷ್ಟು ಕಷ್ಟಪಟ್ಟ ನಂತರವೇ regex ಕಲಿಯಲು ಮುಂದಾಗುತ್ತಾರೆ. ಒಂದು ಉತ್ತಮ ವಿಧಾನವೆಂದರೆ, ಒಂದು ಮಧ್ಯಾಹ್ನವನ್ನು ವ್ಯರ್ಥ ಮಾಡುವ ಮೊದಲು ಪ್ಯಾಟರ್ನ್ ಅಗತ್ಯವಿರುವ ಕೆಲಸಗಳನ್ನು ಗುರುತಿಸುವುದು.
ನೀವು ಇನ್ನೂರು ಪುಟಗಳ ದಾಖಲೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು ದಿನಾಂಕವನ್ನು ಹುಡುಕಬೇಕಿದ್ದರೆ, regex ಅದನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಪತ್ತೆಹಚ್ಚುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಸ್ವೀಕರಿಸುವ ಮೊದಲು ಬಳಕೆದಾರರು ನೈಜ URL ಅನ್ನು ಟೈಪ್ ಮಾಡಿದ್ದಾರೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಬೇಕಿದ್ದರೆ, ಒಂದು ಪ್ಯಾಟರ್ನ್ ವಿಳಾಸದ ಮೂಲಭೂತ ಆಕಾರವನ್ನು ಕಡ್ಡಾಯಗೊಳಿಸಬಹುದು. ನೀವು ವೆಬ್ಸೈಟ್ನಿಂದ ಕಾಪಿ ಮಾಡಿದ ಪಠ್ಯವನ್ನು ಕ್ಲೀನ್ ಮಾಡುತ್ತಿದ್ದರೆ ಮತ್ತು ಬಹುತೇಕ ಖಾಲಿ ಜಾಗಗಳನ್ನು (spaces) ಒಂದೇ ಖಾಲಿ ಜಾಗವಾಗಿ ಬದಲಾಯಿಸಬೇಕಿದ್ದರೆ, ಒಂದು replacement regex ಕೇವಲ ನಾಲ್ಕು ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ನೀವು ಅಸ್ತವ್ಯಸ್ತವಾದ ಸರ್ವರ್ ಲಾಗ್ಗಳಿಂದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯುತ್ತಿದ್ದರೆ, ಅಸಂಘಟಿತ ಪಠ್ಯ ಮತ್ತು ಸಂಘಟಿತ ವರದಿಯ ನಡುವಿನ ಏಕೈಕ ಸಮಂಜಸವಾದ ಸೇತುವೆ ಆಗಿರುತ್ತದೆ regex.
ಇಲ್ಲಿ ಅಳವಡಿಸಿಕೊಳ್ಳಲು ಒಂದು ಸರಳ ನಿಯಮವಿದೆ: ನೀವು ಪಠ್ಯವನ್ನು ಐವತ್ತು ಬಾರಿ ಕೈಯಿಂದ ಎಡಿಟ್ ಮಾಡಲು ಹೊರಟಿದ್ದರೆ, ನಿಲ್ಲಿಸಿ. ಬದಲಾಗಿ ಒಂದು ಪ್ಯಾಟರ್ನ್ ಬರೆಯಿರಿ. ಮ್ಯಾನುಯಲ್ ಪುನರಾವರ್ತನೆಯು ಕೇವಲ ನಿಧಾನವಾಗಿರದೆ, ಅದು ಅನಿಶ್ಚಿತವೂ ಹೌದು. ನೀವು 47ನೇ ಉದಾಹರಣೆಯನ್ನು ಮಿಸ್ ಮಾಡಬಹುದು ಅಥವಾ 33ನೇ ಬಾರಿ ಟೈಪೊ (typo) ಮಾಡಬಹುದು. ಒಂದು ಪ್ಯಾಟರ್ನ್ ಕೆಲಸವನ್ನು ಒಮ್ಮೆ ಮಾತ್ರ ಮಾಡುತ್ತದೆ, ಅದು ಕೂಡ ಸರಿಯಾಗಿ ಮಾಡುತ್ತದೆ ಮತ್ತು ನೀವು ಅನ್ವಯಿಸುತ್ತಿದ್ದ ನಿಯಮವನ್ನು ಅದು ದಾಖಲಿಸುತ್ತದೆ.
ಕೆಲಸ ಮಾಡುವ ಕಲಿಕೆಯ ಲೂಪ್
ನೆನಪಿನ ಶಕ್ತಿಯಿಂದ ಪರಿಪೂರ್ಣ ಪ್ಯಾಟರ್ನ್ಗಳನ್ನು ಟೈಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಬೇಡಿ. ಇದರಿಂದ ಹತಾಶೆ ಹೆಚ್ಚಾಗುತ್ತದೆ. ಬದಲಾಗಿ, ಸಿಂಟ್ಯಾಕ್ಸ್ನಲ್ಲಿ (syntax) ಕಳೆದುಹೋಗದೆ ಮುನ್ನಡೆಯಲು ಒಂದು ಕಟ್ಟುನಿಟ್ಟಾದ ಲೂಪ್ ಅನ್ನು ಅನುಸರಿಸಿ.
- ಆಕಾರವನ್ನು ಪದಗಳಲ್ಲಿ ವಿವರಿಸಿ. ನೀವು ಯಾವುದೇ ವಿಶೇಷ ಅಕ್ಷರವನ್ನು ಮುಟ್ಟುವ ಮೊದಲು, ನಿಮಗೆ ನಿಖರವಾಗಿ ಏನು ಬೇಕು ಎಂಬುದನ್ನು ಬರೆಯಿರಿ. "ನಾಲ್ಕು ಅಂಕಿಗಳು, ನಂತರ ಒಂದು ಡ್ಯಾಶ್, ನಂತರ ಎರಡು ಅಂಕಿಗಳು, ನಂತರ ಒಂದು ಡ್ಯಾಶ್, ನಂತರ ಎರಡು ಅಂಕಿಗಳು." ನೀವು ಅದನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಹೇಳಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ನೀವು ಅದಕ್ಕೆ ಪ್ಯಾಟರ್ನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.
- ಮೊದಲ ಕರಡನ್ನು (first draft) ಸಿದ್ಧಪಡಿಸಿ. ನಿಮ್ಮ ವಿವರಣೆಯನ್ನು ಸಾಧ್ಯವಿರುವ ಅತಿ ವಿಶಾಲವಾದ ಸಂಕೇತಗಳನ್ನು ಬಳಸಿ ಮೂಲಭೂತ ಪ್ಯಾಟರ್ನ್ ಆಗಿ ಪರಿವರ್ತಿಸಿ. ಪರಿಪೂರ್ಣತೆಯ ಬಗ್ಗೆ ಚಿಂತಿಸಬೇಡಿ. ನೀವು ಒಂದು ಪ್ರೊಟೊಟೈಪ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತಿದ್ದೀರಿ,
